SQL Server插入或更新命令用于复制主键

时间:2018-01-15 18:30:37

标签: sql-server triggers insert sql-update

我对“导入”进行了触发。将规范化数据发送到我的主要表格的表格。表。 目前,如果插入两次相同的数据,则触发器将删除主表中找到的数据并重新插入。虽然这已经有一段时间了,但删除可能是好的数据似乎是一个坏主意。

我目前的代码如下:

DELETE FROM [MainTable]
WHERE [DeviceSN] IN (
    SELECT DISTINCT [DeviceSN]
    FROM [ImportTable]
    INNER JOIN [MapTable] ON [ImportTable].[Component] = [MapTable].[Component] and [ImportTable].[Property] = [MapTable].[Property]
    WHERE DateAdded < [Created Date] AND [Imported] = 0
)

INSERT INTO [MainTable]
    ([DeviceSN]
    ,[Key]
    ,[Value]
SELECT
     [DeviceSN]
    ,[Key]
    ,[Value]
FROM [ImportTable]
    INNER JOIN [MapTable] ON [ImportTable].[Component] = [MapTable].[Component] and [ImportTable].[Property] = [MapTable].[Property]
    WHERE [Imported] = 0;

UPDATE [ImportTable]
SET [Imported] = 1
FROM [ImportTable]
    INNER JOIN [MapTable] ON [ImportTable].[Component] = [MapTable].[Component] and [ImportTable].[Property] = [MapTable].[Property]
    WHERE [Imported] = 0;

我想知道我是否有办法简单地更新存在主键约束的值,而不是每次都从主表中删除。

另外, 映射表只是为每个串行属性分配一个键值。它基本上是一个帮助规范化数据的字典。 我知道我应该在这些触发器中使用伪表。这是我打算做的事情。

0 个答案:

没有答案