【发布时间】:2018-01-16 00:48:39
【问题描述】:
我正在尝试为一个可以说非常简单的任务找到一个可行的解决方案:
我有一个这样的简单查询:
INSERT INTO [INTRANET].[dbo].[SOME_STATUS]
([AUS_STATUS_VID]
,[AUS_STATUS_STATUS]
,[AUS_STATUS_JAHR]
,[AUS_STAUTS_END]
)
SELECT DISTINCT CD_CLVID, '1', '2017', '0'
FROM [SNTRANET].[dbo].[SOME_DETAILS]
WHERE CD_JAHR = 2017
长话短说:用另一个表的结果填满一个表。现在看来,我收到的数据不一致。我试图找到类似于replace into 或on duplicate key update 的解决方案(我习惯于使用MySQL)。但是,T-SQL 似乎没有这个。
是否有一个简单的解决方案可以跳过重复密钥并继续处理结果集的其余部分?
我使用的是 SQLServer 2008 R2
编辑 1
根据要求,错误消息:
违反主键约束“PK_T_KB_AUSZAHLUNG_STATUS”。无法在对象“dbo.T_KB_AUSZAHLUNG_STATUS”中插入重复键。重复键值为 (7463)。
【问题讨论】:
-
我能提供的最好的方法是 IF NOT EXIST (SELECT ...) BEGIN /*insert your insert :)*/ END
-
哪一列是重复键?
-
重复从哪里来?如果我正确阅读了您的查询,则 select 语句会返回一个不同的
CD_CLVIDs 列表。如果[INTRANET].[dbo].[SOME_STATUS]中的AUS_STATUS_VID期望唯一值,它应该得到它们。你能提供create table语句吗?错误消息也会有所帮助。 -
@destination-data 添加了错误消息。您需要哪个创建表?了解状态或详细信息?
-
两者都很好。如果您可以输入一些重现错误的示例数据,那就更好了!
标签: sql-server tsql