2
私は@Value
パラメータを受け取るこのストアドプロシージャを持っています。パラメータ値がNULL
の場合、その値を使用してデータをフィルタリングするか、またはフィルタリングを無視する必要があります。XQuery内でsql:variableとNULLを比較する方法
は
WHERE @Value IS NULL OR Value = @Value
のような単純なものだろうが、私は、XQuery式の内側に同じアイデアを使用する方法がわかりません。空の値がnullの場合、リテラル文字列、または
@Value
が使用していることを設定
- :私はすることで、この問題を回避することができ
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)
:今、私はこのようなコードを持っていますいくつかの動的アプローチでXQuery式を作成し、それを実行してください。
sp_executesql
私はそれを避けたいと思います。
sql:variable
をXQuery内のNULL
の値と比較する方法を教えてください。
これは[exist()](https://msdn.microsoft.com/en-us/library/ms189869.aspx?f=255&MSPPError=-2147217396)で実現できますか? – techspider
明示的なシーケンスは含まれていないので直感的ではありませんが、[空(sql:variable( "@Value"))]](https://msdn.microsoft.com/library/ms186394)を実行する必要があります。 –
@JeroenMostertあなたが正しいです、この場合は「空」がうまくいきます。それを答えて、私はこの質問を閉じるでしょう。ありがとう! –