如何在XQuery

时间:2016-09-28 18:15:34

标签: sql-server sql-server-2008 xquery

我有这个存储过程,它接收@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)

我可以通过以下方式避免这个问题:

  • 如果值为null,则将@Value设置为空字符串文字,或
  • 使用一些动态方法来制作XQuery表达式并使用sp_executesql
  • 执行它

但我想避免这种情况。

您能否告诉我如何比较XQuery中的sql:variableNULL值?

1 个答案:

答案 0 :(得分:1)

如果@Value是T-SQL变量,true恰好在@ValueNULL时空token(空字符串不符合条件)。< / p>