我在SQL Server 2005中這個XML查詢:SQL Server 2005的XML查詢問題 「.exist」 方法
SElECT XmlField FROM tablename WHERE xmlField.exist('(/Root/Name[id="10")[1]') = 1
不過,我想用一個參數來代替值 「10」我傳遞給存儲過程。我如何實現這一目標?我曾嘗試使用「@variablename」,但它不起作用。
在此先感謝。
我在SQL Server 2005中這個XML查詢:SQL Server 2005的XML查詢問題 「.exist」 方法
SElECT XmlField FROM tablename WHERE xmlField.exist('(/Root/Name[id="10")[1]') = 1
不過,我想用一個參數來代替值 「10」我傳遞給存儲過程。我如何實現這一目標?我曾嘗試使用「@variablename」,但它不起作用。
在此先感謝。
也許,你想擁有像
SELECT XmlField FROM tablename WHERE xmlField.exist('(/Root/Name[id="{ sql:variable("@variablename") }")[1]') = 1
見http://msdn.microsoft.com/en-us/library/ms188254(v=SQL.100).aspx如何訪問變量和列的XQuery在SQL Server中。
的頭髮拉......我找到了答案几分鐘後...
Result_XML.exist('(/Root/Name[id="{sql:variable("@myId")}"])[1]') = 1
應該寫成
Result_XML.exist('(/Root/Name[id=(sql:variable("@myId"))])[1]') = 1
我更換了「{和}「與(和)以包含關鍵字sql:變量。
也許你甚至可以離開(和)。也許我從MSDN文檔中獲得的「{和}」中的封閉僅僅是構建XML所必需的,而不是用於XPath比較。 – Frank 2010-07-01 11:32:30
你是對的弗蘭克,(和)沒有必要,它仍然沒有他們的作品。再次感謝您的回覆。高度讚賞! – user380850 2010-07-01 12:41:14
還有一件事我發現了很多很多的試驗:如果你的變量是一個char值,如果你在你的sql語句中聲明它,它應該是varchar,而不是char。
這個SQL沒有返回任何結果:
DECLARE @myparam char(50)
SET @myparam = 'someval'
...
WHERE
t.c.exist('/root/child[text() = sql:variable("@myparam ")]') = 1
但這:
DECLARE @myparam varchar(50)
SET @myparam = 'someval'
...
WHERE
t.c.exist('/root/child[text() = sql:variable("@myparam ")]') = 1
也許這是顯而易見的,但我花了一些時間之前,我之所以沒有記錄會被退回。
感謝弗蘭克的迴應。我已經嘗試了您的建議,但收到錯誤消息。這是我正在使用的代碼行: '... WHERE Result_XML.exist('(/ Root/Name [id =「{sql:variable(」@ myId「)}」])[1]') = 1' 我已經宣佈,該行代碼 之前賦值給變量'@ myId'我收到此錯誤信息: '消息9303,級別16,狀態1,行15 的XQuery [Staff_Process_Triggers .Result_XML.exist()]:在'@'附近出現語法錯誤,預計爲']'。' – user380850 2010-07-01 11:02:23