2014-01-24 75 views
0
@id NVARCHAR(12), 
@query NVARCHAR(500), 
@paramDef NVARCHAR(100) = N'@id NVARCHAR(12)' 

我有下面這行了語法錯誤,特別是在@idsp_executesql的帶參數的語法錯誤

set @query = N'select * from OPENQUERY([REMOTESERVER], ''EXEC db.dbo.dwStoredProc_sp ''@id'')''' 

然後我用

exec sp_executesql @query, @paramDef, @id 

我希望我的單引號是不正確的。

+0

爲什麼在你的報價參數@id? –

+0

當我通過串聯字符串來進行查詢時,剩下的就是'sp_executesql'好得多。 – Lee

+0

你的字符串看起來像'select * from OPENQUERY([REMOTESERVER],'EXEC db.dbo.dwStoredProc_sp'@id')''。這是對的嗎? –

回答

1

您可能不希望將'@id'作爲字符串傳遞給SP。

這可能是你的意思:

set @query = N'select * from OPENQUERY([REMOTESERVER], ''EXEC db.dbo.dwStoredProc_sp ' + @id + ''')'; 
+0

我不認爲要傳遞實際值而不是佔位符。謝謝。 – Lee

+0

那麼注射呢?正確的答案是@juergen d答案。 –

+0

我試過了,但是如果你可以在字符串中使用參數,就像在juergen的答案中一樣,這當然更可取。 – KekuSemau

4

您最近的)錯誤,您不需要引用@id。嘗試

set @query = 
    N'select * from OPENQUERY([REMOTESERVER], ''EXEC db.dbo.dwStoredProc_sp ' + @id + ''')' 
+0

這是正確答案! –

+0

有了這個,我得到了我需要聲明'@ id'標量值 – Lee

+0

的錯誤啊,我明白了。我更新了答案。 –

1

很顯然,這是報價問題。

但論壇給你一個答案並不給你的工具在未來找到問題。

這是一個普遍的調試問題。下一次,打印出動態的TSQL。切入並進入另一個窗口。

你會很快發現你的問題。檢查一下鮮爲人知的處理指令命令。

適用於巨大的多行語句。

-- Old school output to message window 
PRINT @query 

-- Cool instruction ? Code in new xml tab. 
SELECT @query as [processing-instruction(TSQL)] FOR XML PATH 

打印樣本的使用。

你應該給Juergen的信貸!

enter image description here

+0

感謝您的建議。 – Lee