SSIS中的fast。因此,通常,我喜欢将数据流传输到一个表,然后使用SQL语句执行set操作

SSIS中的fast。因此,通常,我喜欢将数据流传输到一个表,然后使用SQL语句执行set操作,sql,sql-server,ssis,Sql,Sql Server,Ssis,在您的情况下,不太清楚SSI是否正在做大量它擅长的工作(数据透视、排序、聚合、查找、异构数据、脚本、验证)(您在SSI外部联合,然后在SSI中拆分并为生成的行调用各个SP),所以我只是把它扔出去。这个特殊的进程不接受任何参数。非常有信息性的链接。这很有趣。我会尝试一下,看看会发生什么。不管是哪种顺序(asc/desc),都可以按顺序抛出订单。添加订单会增加执行计划的时间,最后一次选择可能是在插入开始之前完成的。我将研究此特定连接(停用)的含义,以及它在同时插入时可能挂起的原因。不幸的是,未检测到

在您的情况下,不太清楚SSI是否正在做大量它擅长的工作(数据透视、排序、聚合、查找、异构数据、脚本、验证)(您在SSI外部联合,然后在SSI中拆分并为生成的行调用各个SP),所以我只是把它扔出去。

这个特殊的进程不接受任何参数。非常有信息性的链接。这很有趣。我会尝试一下,看看会发生什么。不管是哪种顺序(asc/desc),都可以按顺序抛出订单。添加订单会增加执行计划的时间,最后一次选择可能是在插入开始之前完成的。我将研究此特定连接(停用)的含义,以及它在同时插入时可能挂起的原因。不幸的是,未检测到锁,使用表提示拒绝锁定/强制锁定无效。我将尝试此设置。如果我必须重写程序和包,我可能会走这条路,谢谢。
SET NOCOUNT ON;

-- entries in A that dont exist in B need to be inserted into B
SELECT 
    A.ID,
    B.ID,
    A.data1,
    A.data2,
    A.data3,
    A.data4,
    F1.ID as Fkey1,
    F2.ID as Fkey2,
    'I' as InsertUpdateDeactivateFlag
FROM A
LEFT JOIN B ON A.val = B.val
LEFT JOIN F1 ON A.f1val = F1.val
LEFT JOIN F2 ON A.f2val = F2.val
WHERE B.ID is null

UNION ALL

-- entries in A that do exist in B that have different field values
SELECT
    A.ID,
    B.ID,
    A.data1,
    A.data2,
    A.data3,
    A.data4,
    F1.ID as Fkey1,
    F2.ID as Fkey2,
    'U' as InsertUpdateDeactivateFlag
FROM A
INNER JOIN B ON A.val = B.val
LEFT JOIN F1 ON A.f1val = F1.val
LEFT JOIN F2 ON A.f2val = F2.val
WHERE
    A.data1 <> B.data1 OR
    A.data2 <> B.data2 OR
    A.data3 <> B.data3 OR
    A.data4 <> B.data4 OR
    F1.ID <> B.Fkey1 OR
    F2.ID <> B.Fkey2

UNION ALL

-- entries in B that dont exist in A should have Active set to 0
SELECT
    A.ID,
    B.ID,
    B.data1,
    B.data2,
    null as data3, -- dont need this value for deactivates
    null as data4, -- dont need this value for deactivates
    B.Fkey1,
    B.Fkey2,
    'D' as InsertUpdateDeactivateFlag
FROM A
RIGHT JOIN B ON A.val = B.val
WHERE A.ID is null
-- entries in B that dont exist in A should have Active set to 0 
SELECT 
    A.ID, 
    B.ID, 
    B.data1, 
    B.data2, 
    null as data3, -- dont need this value for deactivates 
    null as data4, -- dont need this value for deactivates 
    B.Fkey1, 
    B.Fkey2, 
    'D' as InsertUpdateDeactivateFlag 
FROM B
WHERE NOT EXISTS (SELECT 1 FROM A WHERE val = B.val)
INSERT INTO B
SELECT *
FROM udf_INSERTS()

UPDATE B
SET whatever
FROM B
INNER JOIN udf_UPDATES() AS u
    ON u.key = B.key

DELETE
FROM B
WHERE B.key IN (SELECT key FROM udf_DELETES())