ejemplos dinamicas datos consultas complejas sql sql-server tsql sql-server-2008-r2 dynamic-sql

dinamicas - Sintaxis de consultas TSQL dinámica simple



ejemplos de sql en base de datos (1)

Esta puede ser una respuesta fácil pero la he estado mirando por mucho tiempo ...

Tengo la siguiente consulta que toma un parámetro de entrada de procedimiento almacenado como un nombre de variable y cuenta los registros en esa tabla. Me gustaría recuperar los resultados de la declaración dinámica (@toStartStr) en una variable (@toStart).

-- @tempTableName = SProc input parameter DECLARE @toStartStr nvarchar(150); DECLARE @toStart int; SET @toStartStr = ''SELECT @toStart = COUNT(ID) FROM '' + @tempTableName; EXEC(@toStartStr);

En este momento, un error sugiere que @toStart no se puede concatenar con la cadena SELECT, pero esta es la esencia de lo que quiero. ¿Alguien puede ver lo que estoy haciendo mal? O sugerir una alternativa? FYI SQL 2008 R2. Gracias.


DECLARE @sql NVARCHAR(255); DECLARE @toStart INT; SET @sql = N''SELECT @toStart = COUNT(ID) FROM '' + QUOTENAME(@tempTableName); EXEC sp_executesql @sql, N''@toStart INT OUTPUT'', @toStart OUTPUT; PRINT @toStart;

Sin embargo, hay una manera mucho más fácil y más eficiente de hacerlo, si está de acuerdo con ignorar las transacciones actuales en vuelo (y está usando SQL Server 2005 o superior; por favor, especifique la versión cuando haga preguntas).

DECLARE @toStart INT; SELECT @toStart = SUM(rows) FROM sys.partitions WHERE [object_id] = OBJECT_ID(@tempTableName) AND index_id IN (0,1); PRINT @toStart;

Solo para completar, aquí hay una solución para SQL Server 2000, que tampoco requiere ningún privilegio especial (solo se conecta y miembro del público):

DECLARE @toStart INT; SELECT @toStart = [rows] FROM sysindexes WHERE id = OBJECT_ID(@tempTableName) AND indid IN (0,1); PRINT @toStart;

Dicho esto, si usa un recuento para determinar cuál puede ser la próxima identificación, o algo así, creo que se está acercando a esto de la manera incorrecta, ya que las filas se pueden eliminar y si se trata de una columna de identidad, los valores pueden omitirse debido a retrocesos.