INSERTAR EN @TABLE EXEC @query con SQL Server 2000

¿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 scope bien definido, que es la función, el procedimiento almacenado o el lote en el que se declara.

Dentro de su scope, 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.

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 
 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