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