2
我有這個存儲過程,它接收到@Value
參數。如果參數值爲NULL
,我需要使用該值來過濾一些數據,或者忽略過濾。如何在XQuery中將SQL:變量與NULL進行比較
使用DML只會簡單到
WHERE @Value IS NULL OR Value = @Value
但我不知道如何使用XQuery表達式內同樣的想法。現在,我有一個類似的代碼:
DECLARE @Value AS VARCHAR(100) = 'f7fc6b6c-bb1b-4961-bb94-1053500436ac'
SELECT Form.FormType,
FormData .value('(/*/Created)[1]' , 'date' ) Created,
FormDataItem.this.value('@Source' , 'varchar(100)') Source,
FormDataItem.this.value('@Value' , 'varchar(100)') Value,
FormDataItem.this.value('@Text' , 'varchar(100)') Text
FROM Form WITH (NOLOCK)
CROSS APPLY Form.FormData.nodes('//*[
(
(sql:variable("@Value") = "" and @Value != "") or
(sql:variable("@Value") != "" and @Value = sql:variable("@Value"))
)]') FormDataItem(this)
我能避免這個問題:
- 設置,
@Value
爲空字符串字面量,如果該值爲null,或 - 使用一些動態的方法來製作XQuery表達式並執行它
sp_executesql
但我想避免這種情況。
你能告訴我應該如何比較sql:variable
和NULL
在XQuery中的值嗎?
這可以通過[exists()](https://msdn.microsoft.com/en-us/library/ms189869.aspx?f=255&MSPPError=-2147217396)來實現嗎? – techspider
這不是很直觀,因爲不涉及顯式序列,但['empty(sql:variable(「@Value」))'](https://msdn.microsoft.com/library/ms186394)應該可以工作。 –
@JeroenMostert你說得對,'空'對這種情況非常有效;做出答案,我會解決這個問題。謝謝! –