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'语句中给定节点的正确数据插入到新表中。整个查询本身运行一组 10 个 XML 文件,比我添加 nullif() 语句之前快了大约 10 秒。我还在有关 xquery 优化的 MS 文档中找到了以下信息:

value() 方法调用必须连续出现在要合并的 SELECT 列表中。非连续 value() 方法的执行不会合并。

所以我的问题是放置这些 nullif() 语句是否会破坏此处描述的性能提升?任何帮助,将不胜感激。

4

0 回答 0