这是真的,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
如果是真的,我该怎么办?
NB -这个问题,答案涉及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.
该文档是误导性的。
我已经在生产中运行下面的代码
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
如果你想在动态查询