上面谈论规范化的答案很棒!但是,如果您发现自己处于像我这样的位置,不允许您按原样接触数据库架构或结构,该怎么办?例如,DBA 是“神”,所有建议的修订都转到 /dev/null?
在这方面,关于上面所有用户提供代码示例,我觉得这个 Stack Overflow 帖子也已经回答了这个问题。
我正在重新发布来自INSERT VALUES WHERE NOT EXISTS的代码,这对我帮助最大,因为我无法更改任何基础数据库表:
INSERT INTO #table1 (Id, guidd, TimeAdded, ExtraData)
SELECT Id, guidd, TimeAdded, ExtraData
FROM #table2
WHERE NOT EXISTS (Select Id, guidd From #table1 WHERE #table1.id = #table2.id)
-----------------------------------
MERGE #table1 as [Target]
USING (select Id, guidd, TimeAdded, ExtraData from #table2) as [Source]
(id, guidd, TimeAdded, ExtraData)
on [Target].id =[Source].id
WHEN NOT MATCHED THEN
INSERT (id, guidd, TimeAdded, ExtraData)
VALUES ([Source].id, [Source].guidd, [Source].TimeAdded, [Source].ExtraData);
------------------------------
INSERT INTO #table1 (id, guidd, TimeAdded, ExtraData)
SELECT id, guidd, TimeAdded, ExtraData from #table2
EXCEPT
SELECT id, guidd, TimeAdded, ExtraData from #table1
------------------------------
INSERT INTO #table1 (id, guidd, TimeAdded, ExtraData)
SELECT #table2.id, #table2.guidd, #table2.TimeAdded, #table2.ExtraData
FROM #table2
LEFT JOIN #table1 on #table1.id = #table2.id
WHERE #table1.id is null
上面的代码使用了与您所拥有的不同的字段,但是您可以通过各种技术获得一般要点。
请注意,根据 Stack Overflow 上的原始答案,此代码是从此处复制的。
无论如何,我的观点是“最佳实践”通常归结为你能做什么和不能做什么以及理论。
- 如果您能够规范化和生成索引/键——太好了!
- 如果没有,并且您可以像我一样使用代码技巧,希望以上内容有所帮助。
祝你好运!