INSERT INTO与SQL Server 2000 @TABLE EXEC @query(INS

2019-07-19 01:27发布

这是真的,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

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

Answer 1:

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.



Answer 2:

该文档是误导性的。
我已经在生产中运行下面的代码

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


Answer 3:

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

如果你想在动态查询



文章来源: INSERT INTO @TABLE EXEC @query with SQL Server 2000