stored statement sp_executesql into from create cannot sql-server tsql sql-server-2000

sql-server - statement - sql server create table exec



INSERTAR EN @TABLE EXEC @query con SQL Server 2000 (3)

La documentación es engañosa.
Tengo el siguiente código ejecutándose en producción

DECLARE @table TABLE (UserID varchar(100)) DECLARE @sql varchar(1000) SET @sql = ''spSelUserIDList'' /* Will also work SET @sql = ''SELECT UserID FROM UserTable'' */ INSERT INTO @table EXEC(@sql) SELECT * FROM @table

¿Es cierto que SQL Server 2000 no se puede insertar en una variable de tabla usando exec?

Intenté este script y obtuve un mensaje de error. EXECUTE cannot be used as a source when inserting into a table variable.

declare @tmp TABLE (code varchar(50), mount money) DECLARE @q nvarchar(4000) SET @q = ''SELECT coa_code, amount FROM T_Ledger_detail'' INSERT INTO @tmp (code, mount) EXEC sp_executesql (@q) SELECT * from @tmp

Si eso es cierto, ¿qué debería hacer?


NB : esta pregunta y respuesta se relacionan con la versión 2000 de SQL Server. En versiones posteriores, se INSERT INTO @table_variable ... EXEC ... la restricción de INSERT INTO @table_variable ... EXEC ... por lo que no se aplica a esas versiones posteriores.

Tendrás que cambiar a una tabla temporal:

CREATE TABLE #tmp (code varchar(50), mount money) DECLARE @q nvarchar(4000) SET @q = ''SELECT coa_code, amount FROM T_Ledger_detail'' INSERT INTO #tmp (code, mount) EXEC sp_executesql (@q) SELECT * from #tmp

De la documentación :

Una variable de tabla se comporta como una variable local. Tiene un alcance bien definido, que es la función, el procedimiento almacenado o el lote en el que se declara.

Dentro de su alcance, una variable de tabla se puede usar como una tabla normal. Puede aplicarse en cualquier lugar en que se use una expresión de tabla o tabla en las instrucciones SELECT, INSERT, UPDATE y DELETE. Sin embargo, la tabla no se puede usar en las siguientes declaraciones:

INSERT INTO table_variable EXEC stored_procedure

SELECT select_list INTO table_variable statements.


DECLARE @q nvarchar(4000) SET @q = ''DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY) INSERT INTO @tmp ( code, mount ) SELECT coa_code, amount FROM T_Ledger_detail SELECT * FROM @tmp'' EXEC sp_executesql @q

Si quieres en consulta dinámica