我想创建一个 DTS 包以将数据从 Oracle 表中提取到 SQL2K 表中。如何插入 SQL2K 表中尚未存在的行并更新 SQL2K 表中已存在的行?
我想我可以截断并重新填充整个表或创建一个临时表,然后将临时表中的更新/插入到目标表中。
使用 DTS 有没有更简单的方法?
谢谢,
罗卡尔
我想创建一个 DTS 包以将数据从 Oracle 表中提取到 SQL2K 表中。如何插入 SQL2K 表中尚未存在的行并更新 SQL2K 表中已存在的行?
我想我可以截断并重新填充整个表或创建一个临时表,然后将临时表中的更新/插入到目标表中。
使用 DTS 有没有更简单的方法?
谢谢,
罗卡尔
您可以在 DTS 包中使用两个数据驱动的查询任务来执行此操作:一个用于插入,另一个用于更新。数据驱动的查询任务使用起来有点麻烦,但它们确实有效。我还在使用动态 t-sql 的 AS/400 数据库的 sql server 2000 中完成了这个(“合并”)。您将编写一个 t-sql 脚本,输出 psql 并在链接服务器上运行它到 Oracle 数据库。
更新:DTS“数据驱动查询任务”将允许您将数据从 DTS 中的 sql server 连接插入|更新到 DTS w/oa 临时表或链接服务器中的 oracle 服务器连接。
更新2;这里有一些关于我的意思的更多信息: http ://www.databasejournal.com/features/mssql/article.php/3315951
http://msdn.microsoft.com/en-us/library/aa933507(SQL.80).aspx
您是否保持相同的主键值?
如果您有多种选择,某些版本的 SQL 支持 MERGE 语句,它将按照您的需要进行更新或插入。
或者你可以自己写。
类似于将所有行加载到 SQL 数据库中的临时表中,并逐行检查主 SQL 表中是否存在主键。如果键存在则更新行,如果不存在则插入。
是的,源和目标中的主键值将匹配。
我希望在不使用临时(暂存)表的情况下完成这项任务。
另外,我使用的是 sql server 2000,所以 MERGE 语句不可用。
TSQL 无法在同一个语句中执行 INSERT 或 UPDATE,但是您可以很容易地在两个语句中执行此操作(如上所述)。
声明 1:
DELETE FROM dbo.WhateverTable
WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)
声明 2:
INSERT INTO dbo.WhateverTable
SELECT * FROM MySource
另外,您是否有任何理由不想使用临时表?
尝试:
DELETE FROM dbo.WhateverTable WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)
它可能很慢,请改用 join :
Delete a
from firstTable a join secondTable b on a.id = b.id