【发布时间】:2014-07-16 20:47:21
【问题描述】:
我正在尝试执行一个需要将变量传递给它的存储过程。一个是静态的,另一个是动态的。
DECLARE @Filt DATETIME
SET @Filt = (SELECT DISTINCT MAX(Date) FROM Data.db.Staging)
SELECT * INTO #tempData FROM OPENROWSET('SQLNCLI', 'Server=ISR14 \MSSQL2012;Trusted_Connection=yes;', 'EXEC GetData.db.Staging @Mode = ''Date'' @Filt ')
但这不起作用,返回错误 “消息 8180,第 16 级,状态 1,第 1 行 无法准备报表。 消息 102,第 15 级,状态 1,第 1 行 '@Filt' 附近的语法不正确。”
我猜这是因为 Filt 是动态语句。所以我尝试了这个
DECLARE @FilterData DATETIME
DECLARE @sql VARCHAR(200)
SET @Filt = (SELECT DISTINCT MAX(AsOfDate) FROM Data.db.Staging)
SET @sql = 'EXEC GetData.db.Staging @Mode = ''Date'' @Filt = ' + @Filt
SELECT * INTO #tempData FROM OPENROWSET('SQLNCLI', 'Server=ISR14\MSSQL2012;Trusted_Connection=yes;',
@sql)
但是我收到了消息
“消息 102,级别 15,状态 1,第 24 行 '@sql' 附近的语法不正确。”
似乎 OPENROWSET 只能接受字符串。但我想传递一个动态的变量。
【问题讨论】:
标签: sql sql-server tsql concatenation openrowset