这里有一篇文章说这是一个坏主意,并且我必须始终INSERT
只使用不在数据库中的数据,而不是使用唯一约束。现在我的表结构如下:
CREATE TABLE [dbo].[TEST](
[ColA] [varchar](255) NULL,
[ColB] [datetime] NULL,
[ColC] [datetime] NULL,
[ColD] [int] NOT NULL,
) ON [PRIMARY]
只需要唯一的行,所以对我来说,将唯一约束设置为:
ALTER TABLE dbo.TEST
ADD CONSTRAINT uniqueRows UNIQUE (ColA, ColB, ColC, ColD) WITH (IGNORE_DUP_KEY = ON)
当使用新信息时,由于多种原因,可能会处理重复数据,因为我的代码不维护状态,因此至少对我来说忽略任何重复数据是有意义的。
但是,在链接的帖子中,@PhilipKelley 在他的回答中说这是一个坏主意,应该按照以下方式进行检查:
INSERT INTO X
VALUES(Y,Z)
WHERE Y NOT IN (SELECT Y FROM X)
在我的情况下,这转化为:
INSERT INTO dbo.TEST
VALUES(ValA,ValB,ValC,ValD)
WHERE (Some complicated check)
或者也许做一些花哨的主键。这里的响应暗示,如果我知道这确实被用作一项功能,我可以继续使用该IGNORE_DUP_KEY
选项,一切都会好起来的。就我而言,建议的路径是什么?