使用 SQL Server DTS 包有条件地插入/更新目标表中的行

发布于 2024-07-07 22:49:19 字数 209 浏览 6 评论 0原文

我想创建一个 DTS 包以将数据从 Oracle 表提取到 SQL2K 桌子。 如何插入 SQL2K 表中尚未存在的行并 更新 SQL2K 表中已存在的行?

我想我可以截断并重新填充整个表或创建一个 临时表,然后从临时表进行更新/插入 目标表。

有没有更简单的方法使用DTS?

谢谢,

罗卡尔

I want to create a DTS Package to pull data from an Oracle table into a SQL2K
table. How can I insert rows that are not already in the SQL2K table and
update rows that already exist in the SQL2K table?

I guess I could truncate and repopulate the entire table or create a
temporary table and then do updates/inserts from the temp table into the
destination table.

Is there any easier way using DTS?

Thanks,

Rokal

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

近箐 2024-07-14 22:49:19

您可以在 DTS 包中使用两个数据驱动的查询任务来执行此操作:一项用于插入,一项用于更新。 数据驱动的查询任务使用起来有点麻烦,但它们确实有效。 我还在 sql server 2000 中使用动态 t-sql 与 AS/400 数据库完成了此操作(“合并”)。 您将编写一个输出 psql 的 t-sql 脚本,并在 Oracle 数据库的链接服务器上运行它。

更新:
DTS“数据驱动查询任务”允许您将数据从 DTS 中的 sql 服务器连接插入|更新到 DTS 中的 oracle 服务器连接(不带临时表或链接服务器)。

更新2; 这里有一些关于我的意思的更多信息:
http://www.databasejournal.com/features/mssql/article.php/ 3315951

http://msdn.microsoft. com/en-us/library/aa933507(SQL.80).aspx

You can do that in a DTS package using two data driven query tasks: one for the inserts and one for the updates. The data driven query tasks are a bit of a pain to use, but they work. I've also done this (a "merge") in sql server 2000 with an AS/400 database using a dynamic t-sql. You'd write a t-sql script that outputs psql and runs it againt a linked server to the Oracle database.

UPDATE:
A DTS "data driven query task" will let you insert|update data from the sql server connection in DTS to an oracle server connection in DTS w/o a temp table or a linked server.

Update2; here's some more info on what I mean:
http://www.databasejournal.com/features/mssql/article.php/3315951

http://msdn.microsoft.com/en-us/library/aa933507(SQL.80).aspx

狼性发作 2024-07-14 22:49:19

您是否保留相同的主键值?

如果您有多种选择,某些版本的 SQL 支持 MERGE 语句,该语句将根据您的需要进行更新或插入。

或者您可以自己编写。

类似于将所有行加载到 SQL 数据库中的临时表中,并逐行检查主 SQL 表中是否存在主键。 如果键存在则更新该行,如果不存在则插入它。

Are you keeping the same primary key values?

If you are you have a number of options, some versions of SQL support the MERGE statement which will update or insert just like you require.

Or you can write your own.

Something along the lines of loading all the rows into a staging table in your SQL database and row by row checking for the existence of your primary key in your main SQL table. If the key exists update the row and if not insert it.

小霸王臭丫头 2024-07-14 22:49:19

是的,源和目标中的主键值将匹配。

我希望在不使用临时(临时)表的情况下完成这项任务。

另外,我使用的是 sql server 2000,因此 MERGE 语句不可用。

Yes, the primary key values in the source and destination will match.

I was hoping to accomplish this task without the use of a temporary (staging) table.

Also, I am using sql server 2000 so the MERGE statement is not available.

旧瑾黎汐 2024-07-14 22:49:19

尝试:

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

Try:

DELETE FROM dbo.WhateverTable WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)

It might be pretty slow, use join instead:

Delete a
from firstTable a join secondTable b on a.id = b.id
╭⌒浅淡时光〆 2024-07-14 22:49:19

TSQL 无法在同一个语句中执行 INSERT 或 UPDATE,但您可以很容易地在两个语句中执行此操作(如上所述)。

语句 1:

DELETE FROM dbo.WhateverTable 
WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)

语句 2:

INSERT INTO dbo.WhateverTable 
SELECT * FROM MySource

另外,您是否有任何理由不想使用临时表?

There's no way with TSQL to do a INSERT or UPDATE in the same statement, but you could very easily do it in two statements (as you mentioned above).

Statement 1:

DELETE FROM dbo.WhateverTable 
WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)

Statement 2:

INSERT INTO dbo.WhateverTable 
SELECT * FROM MySource

Also, is there any reason why you don't want to use a temp table?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文