46

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

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

4

3 回答 3

75

注意- 这个问题和答案与 SQL Server 的 2000 版本有关。在以后的版本中,限制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 语句中使用表或表表达式的任何地方。但是,table 不能用于以下语句:

INSERT INTO table_variable EXEC stored_procedure

SELECT select_list INTO table_variable statements.

于 2013-01-31T10:13:39.537 回答
13

该文档具有误导性。
我在生产中运行以下代码

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
于 2014-03-30T16:29:14.070 回答
5
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

如果你想在动态查询

于 2013-01-31T10:06:54.350 回答