使用 SQL Server 2000 插入 @TABLE EXEC @query
Posted
技术标签:
【中文标题】使用 SQL Server 2000 插入 @TABLE EXEC @query【英文标题】:INSERT INTO @TABLE EXEC @query with SQL Server 2000 【发布时间】:2013-01-15 09:16:42 【问题描述】:是不是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
如果是这样,我该怎么办?
【问题讨论】:
如果是真的,你应该CREATE TEMP TABLE
(我相信你可以从EXEC插入临时表)。
“这是真的吗?” - yes - "但是,表不能用于以下语句:INSERT INTO table_variable EXEC stored_procedure"
好的,我明白了,就像@Anton Kovalenko 说的,我需要创建临时表,而不是表变量...谢谢。 :)
【参考方案1】:
注意 - 这个问题和答案与 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
来自documentation:
表变量的行为类似于局部变量。它有一个明确定义的范围,即声明它的函数、存储过程或批处理。
在其范围内,表变量可以像常规表一样使用。它可以应用于在 SELECT、INSERT、UPDATE 和 DELETE 语句中使用表或表表达式的任何地方。但是,table 不能用在以下语句中:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.
【讨论】:
@Damien,在您的示例中,没有理由使用临时表,即使在您的示例中,您仍然可以使用 Table 变量。 2008+年验证可以使用@tableVariables @ohmusama - 是的,但这个问题被标记为2000
,我已经链接到 2000 文档,说它不可用。
@Damien_The_Unbeliever,我知道,但由于谷歌无法弄清楚,(当我从那里来到这里时),这是对像我这样的其他人的评论。
@ohmusama - 好的,我在顶部添加了一条注释以(尝试)清楚地表明这个问题和答案只与 2000 版本的产品有关。【参考方案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
【讨论】:
【参考方案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
如果你想动态查询
【讨论】:
是的,我希望这些值来自动态脚本..我认为这不是动态的.. 所以上面的查询会对你有所帮助 是的,这是一个静态执行。为了使它成为动态的,您需要在@q
变量的赋值中进行连接。不错的尝试,但没有骰子。以上是关于使用 SQL Server 2000 插入 @TABLE EXEC @query的主要内容,如果未能解决你的问题,请参考以下文章
请教,SQL SERVER 2000使用insert插入一条记录,最快耗时多少