使用SQL Server 2000插入@TABLE EXEC @query

XMo*_*art 37 t-sql sql-server sql-server-2000

是不是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
Run Code Online (Sandbox Code Playgroud)

如果这是真的,我该怎么办?

Dam*_*ver 65

注意 - 这个问题和答案与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
Run Code Online (Sandbox Code Playgroud)

文档:

表变量的行为类似于局部变量.它具有明确定义的范围,即声明它的函数,存储过程或批处理.

在其范围内,表变量可以像常规表一样使用.它可以应用于SELECT,INSERT,UPDATE和DELETE语句中使用表或表表达式的任何位置.但是,表格不能用于以下声明:

INSERT INTO table_variable EXEC stored_procedure

SELECT select_list INTO table_variable statements.

  • @ohmusama - 是的,但问题是标记为"2000",我已经链接到2000文档说它不可用. (3认同)
  • 已验证您可以在2008年使用@tableVariables (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)


bry*_*val 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
Run Code Online (Sandbox Code Playgroud)

如果你想要动态查询