SQL Server 2008 に次の動的 SQL ブロックがあります (より大きなクエリの一部として):
insert into '+@schema+'.HP_Payers (HeadingID, PayerName, PayerID_Qualifier, PayerID, Address1, Address2, City, StateCode, ZipCode)
select @headingID as HeadingID,
nullif(c.value(''Name'', ''varchar(60)''), '''') as PayerName,
nullif(c.value(''ID_Qualifier'', ''varchar(2)''), '''') as PayerID_Qualifier,
nullif(c.value(''ID_Code'', ''varchar(80)''), '''') as PayerID,
nullif(c.value(''Address1'', ''varchar(55)''), '''') as Address1,
nullif(c.value(''Address2'', ''varchar(55)''), '''') as Address2,
nullif(c.value(''City'', ''varchar(30)''), '''') as City,
nullif(c.value(''StateCode'', ''char(2)''), '''') as StateCode,
nullif(c.value(''ZipCode'', ''varchar(15)''), '''') as ZipCode
from '+@schema+'.IntegrationQueue cross apply InputValue.nodes(''/ROOT/Payer'') t(c)
where QueueID = @queueID
「from」ステートメントで指定されたノードから正しいデータを新しいテーブルに挿入します。クエリ自体は、nullif() ステートメントを追加する前よりも約 10 秒速く、10 個の XML ファイルのセットを実行しました。また、xquery の最適化に関する MS のドキュメントで、このちょっとした情報を見つけました。
value() メソッド呼び出しは、マージされる SELECT リストに連続して現れる必要があります。連続していない value() メソッドの実行は結合されません。
したがって、私の質問は、これらの nullif() ステートメントを配置すると、ここで説明したこのパフォーマンスの向上が本質的に台無しになりますか? どんな助けでも大歓迎です。