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

时间:2013-01-31 09:56:54

标签: sql-server tsql 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

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

3 个答案:

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

来自documentation

  

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

     

在其范围内,表变量可以像常规表一样使用。它可以应用于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

如果你想要动态查询