【发布时间】:2015-05-18 10:05:02
【问题描述】:
我正在尝试插入一个对 (ProductType, ProductOwnerid) 具有唯一约束的表,当该键已经存在时,不会触发约束冲突。所以我有这个按预期工作的 SQL:
INSERT INTO dbo.Products (ProductType, ProductOwnerId)
SELECT TOP 1 22, 44 FROM dbo.products prods
WHERE NOT EXISTS (
SELECT prods2.ProductType FROM dbo.products prods2
WHERE prods2.ProductType = 22 AND prods2.ProductOwnerId = 44)
这是不错的 SQL 还是我该如何改进?我不是 TOP 1 的忠实粉丝,我怎样才能使它更具可读性/性能更好?
【问题讨论】:
-
22 和 44 是否仅用于演示,或者这两个始终在您的查询中?否则这没有任何意义。
-
你为什么想要一个永远不会触发的约束。然后删除它。
-
改用 MERGE。
-
你也可以选择
If select count ... = 0 Then Insert...。这至少会使其更具可读性。 -
22 和 44 仅用于演示目的,在生产中使用参数化查询/命令
标签: sql sql-server performance database-performance