1

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() ステートメントを配置すると、ここで説明したこのパフォーマンスの向上が本質的に台無しになりますか? どんな助けでも大歓迎です。

4

0 に答える 0