可能重复:
如何在动态 sql 语句中使用表变量?
如果我用 TEMPORARY TABLE 做我想做的事,它可以正常工作:
DECLARE @CTRFR VARCHAR(MAX)
SET @CTRFR = 'select blah blah blah' -- <-- very long select statement. this returns a 0 or some greater number. Please note! --> I NEED THIS NUMBER.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo][#CTRFRResult]') AND type IN (N'U') )
DROP TABLE [dbo].[#CTRFRResult]
CREATE TABLE #CTRFRResult
(
CTRFRResult VARCHAR(MAX)
)
SET @CTRFR = 'insert into #CTRFRResult ' + @CTRFR
EXEC(@CTRFR)
以上工作正常。
问题是几个数据库正在使用同一个 TEMP 表。因此我需要使用 VARIABLE 表(而不是临时表)。
我在下面的内容不起作用,因为它说必须声明该表。
DECLARE @CTRFRResult TABLE
(
CTRFRResult VARCHAR(MAX)
)
SET @CTRFR = 'insert into @CTRFRResult ' + @CTRFR -- I think the issue is here.
EXEC(@CTRFR)
设置@CTRFR
为insert into...
不起作用,因为我假设表名超出范围。我将如何使用变量表来模仿临时表代码?
我收到的错误消息是:
必须声明表变量“@CTRFRResult”