是不是SQL Server 2000,你不能使用exec插入表变量?
我尝试了这个脚本并收到错误消息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
如果这是真的,我该怎么办?
答案 0 :(得分:63)
N.B。 - 这个问题和答案与2000版的SQL Server有关。在以后的版本中,对INSERT INTO @table_variable ... EXEC ...
的限制被取消,因此不适用于那些更高版本。
您必须切换到临时表:
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
表变量的行为类似于局部变量。它具有明确定义的范围,即声明它的函数,存储过程或批处理。
在其范围内,表变量可以像常规表一样使用。它可以应用于SELECT,INSERT,UPDATE和DELETE语句中使用表或表表达式的任何位置。但是,表格不能用于以下陈述中:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.
答案 1 :(得分:9)
文档具有误导性 我在生产中运行以下代码
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
答案 2 :(得分:6)
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
如果你想要动态查询