我有这个存储过程,它接收@Value
参数。如果参数值为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
设置为空字符串文字,或sp_executesql
但我想避免这种情况。
您能否告诉我如何比较XQuery中的sql:variable
到NULL
值?
答案 0 :(得分:1)
如果@Value
是T-SQL变量,true
恰好在@Value
为NULL
时空token
(空字符串不符合条件)。< / p>