我有一种情况需要比较两个表,其中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是不可能的。
有什么建议吗?提前谢谢。