使用 INTERSECT

问题描述

重点是在 2 个数据库(Web 服务)之间传输数据。此查询正在检查自上次以来是否有任何更改。我们只在有变化时使用它来做事情,所以我们不会两次导入相同的东西。我查看了日志,这一步是所有步骤中成本最高的一步。不是很糟糕,但也许有办法导入。

注意事项:

  1. 表是由代码生成的——这意味着我不能直接向它添加索引,但我可以改变我们生成未来表的方式,并且可能通过添加到表中的所需索引直接生成它们.

  2. 示例中的脚本不是我制作的,我只是使用它。如果我们可以将脚本更改为运行得更快,那很好,如果我们将其更改为使用完全不同的东西,那也很好。除了 INTERSECT 之外,还有什么更好的方法可以做到这一点?

  3. 有“n”列,这意味着导入的不同集合具有不同的导入列数,因此无论我更改什么,它都必须使用不同的列数。

  4. 这可能很明显,但我想我会写下来:引号之间的值是“新”值,而 INTERSECT 下方的“SELECT *”是旧值

我们目前使用的代码是这样的(稍微改了名字,希望我没有破坏脚本)

DECLARE @NoOfSimilarRecords INT

SELECT @NoOfSimilarRecords = COUNT([tId])         
FROM (                    
    SELECT h.[OrderhId],h.[UserId],h.[Code],h.[Date],h.[R],h.[ValidDate],h.[OId],h.[BId],h.[CreatedDate],h.[ImportDate],h.[ImportStatus],h.[ProcessstartTime],h.[ProcessEndTime],11387 AS [c1_id],'Request Filtered' AS [c2_companyname],'Everdell Demetrius' AS [c3_sname],'C5AB2106-1329-423C-97AB-D22E7431F14E' AS [c4_scode],'u_9A91C2' AS [c5_zonecode],'E' AS [c6_flag],99.59 AS [c7_price],48 AS [c8_length],82 AS [c9_width],21 AS [c10_height],878.33 AS [c11_weight],'03/02/2021' AS [c12_bookdate],'01/10/1962' AS [c13_sentdate],'03/24/1992' AS [c14_estimatedarrival],'08/13/2073' AS [c15_pickupdate],'07/27/1994' AS [c16_dropoffdate]          
    FROM [FTB99274h] h
    WHERE  Id = 11387 AND [ValidDate] IS NULL             
    INTERSECT                  
    SELECT * FROM [FTB99274h] WHERE Id = 11387 AND [ValidDate] IS NULL          
) AS Result

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)