从XML路径

时间:2018-05-02 16:12:13

标签: sql sql-server

我有一种情况需要比较两个表,其中t1.ColumnA = t2.ColumnA和t1.ColumnB<> t2.ColumnB。这个问题的警告是t2.ColumnB使用“FOR XML PATH”来连接另一个表(使用OPENQUERY的链接服务器)中的值。这一切都必须在View中完成。

要连接行,我使用以下代码:

SELECT DISTINCT 
CAST(A.CHECK_NUMBER AS nvarchar) [CHECK_NUMBER]
,(
    SELECT B.INVOICE_NUMBER + '|' 
    FROM OPENQUERY([SERVER], 'SELECT * FROM CHECK_LISTING ') B 
    WHERE B.CHECK_NUMBER = A.CHECK_NUMBER 
    AND (NULLIF (B.INVOICE_NUMBER, '') IS NOT NULL) 
    FOR XML PATH('')
) [INVOICE_NUMBER]
, (
    SELECT LTRIM(RTRIM(B.PURCHASE_ORDER_ID)) + '|'
    FROM OPENQUERY([SERVER], 'SELECT * FROM CHECK_LISTING ') B 
    WHERE B.CHECK_NUMBER = A.CHECK_NUMBER 
    AND (NULLIF (B.PURCHASE_ORDER_ID, '') IS NOT NULL) 
    FOR XML PATH('')
) [PURCHASE_ORDER_ID]
FROM OPENQUERY([SERVER], 'SELECT * FROM CHECK_LISTING ') AS A

这完美地工作并且就像它需要的那样连接。我的问题是我创建的下一个视图是针对本地表运行该视图以查看INVOICE_NUMBER中的差异。

SELECT 
    A.EntryID,
    A.Check#,
    A.CheckDate,
    A.CheckAmount,
    A.VendorID,
    A.VendorName,
    B.INVOICE_NUMBER,
    A.Invoice#
FROM dbo.APChecks AS A
    LEFT JOIN 
        dbo.CHECKS_Step2 AS B
        ON A.Check#=B.CHECK_NUMBER
WHERE (A.Invoice# != B.INVOICE_NUMBER)

当我尝试运行此命令时,查询至少需要25分钟以上。我不得不手动停止查询。某些连接值超过1000个字符。有人告诉我,对于像XML PATH这样的动态条目,INDEX是不可能的。

有什么建议吗?提前谢谢。

0 个答案:

没有答案