【发布时间】:2009-08-05 07:54:11
【问题描述】:
我使用的是 SQL Server 2008 Enterprise。我需要将服务器/实例“Server Foo”、数据库“Foo”和表“Foo”中的所有数据导入目标服务器/实例“Server Goo”、数据库“Goo”和表“Goo”。 Table Foo 和 Table Goo 具有相同的架构。如果表 Goo 存在同一行,我想将原始数据保留在 Goo 中,并在 Foo 中导入导入行(表 Foo 和表 Goo 都有一个名为 CustomerID 的唯一标识符类型列,它充当主键和聚集索引),只是就像忽略重复键一样。
我正在寻找简单可靠的方法来编写 T-SQL 来解决数据导出/导入问题。有参考样本吗?
编辑 1:
我使用 MERGE 尝试了以下解决方案,但遇到了来自 SQL Server Management Studio 的以下错误。有什么想法有什么问题吗?
更多信息:
LabTest1\SQLServer2008 => 服务器\实例名称; OrderDB => 数据库名称; dbo => 模式名称; Orders => 表名。
merge into [dbo].[Orders] as Target
using "LabTest1\SQLServer2008.OrderDB.dbo.Orders" as source
on target.Hash = source.Hash
when not matched then
INSERT ([Hash]
,[Order]
,[Name]
,[CreationTime]
,[Description])
VALUES
(
source.[Hash], source.[Order], source.[Name], source.[CreationTime], source.[Description]
)
when MATCHED then
;
错误信息:
消息 102,级别 15,状态 1,第 16 行 ';' 附近的语法不正确。
提前致谢, 乔治
【问题讨论】:
-
然后一起删除 WHEN MATCHED THEN 行 - 如果源条目和目标条目匹配,您什么都不做,对吧?您可以在此处发出 UPDATE 语句
标签: sql sql-server tsql sql-server-2008