【问题标题】:Using SQL Server DTS Package to Conditionally Insert / Update Rows in Destination Table使用 SQL Server DTS 包有条件地在目标表中插入/更新行
【发布时间】:2008-10-23 00:10:20
【问题描述】:

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

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

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

谢谢,

罗卡尔

【问题讨论】:

    标签: sql sql-server database tsql dts


    【解决方案1】:

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

    更新: DTS“数据驱动查询任务”让您将数据从 DTS 中的 sql server 连接插入|更新到 DTS 中的 oracle 服务器连接,无需临时表或链接服务器。

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

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

    【讨论】:

    • Booji Boy:是的,我可以创建一个数据库链接并编写两个数据驱动的查询。我希望有一种方法可以不使用链接服务器或临时表。
    • 我发现了一些关于 DTS 中数据驱动查询任务的附加信息。让我知道它是否有帮助 - 我可能会挖掘(或制作)并向您发送示例。
    【解决方案2】:

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

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

    或者你可以自己写。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        试试:

        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
        

        【讨论】:

          【解决方案5】:

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

          声明 1:

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

          声明 2:

          INSERT INTO dbo.WhateverTable 
          SELECT * FROM MySource
          

          另外,你有什么理由不想使用临时表吗?

          【讨论】:

          • Timothy Khouri:你的方法需要数据库链接对吗?
          • merge 的行为类似于 tsql 中的一条语句中的插入或更新
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 1970-01-01
          • 2014-08-01
          • 1970-01-01
          相关资源
          最近更新 更多