我有一张桌子叫做CustomerMemo:
客户备忘录
CustomerID
MemoID
Run Code Online (Sandbox Code Playgroud)
这两个都是外键。这些列不是唯一的,因为可能是这样的:
CustomerID MemoID
----------- -------
1 1
1 2
1 3
Run Code Online (Sandbox Code Playgroud)
然而,我想避免的是这样的事情:
CustomerID MemoID
----------- -------
1 1
1 1
Run Code Online (Sandbox Code Playgroud)
有人知道如何在 SQL Server 中执行此操作吗?
如果您确实想在插入时忽略重复键,那么您需要IGNORE_DUP_KEY在索引或唯一约束定义中使用索引选项。
这是MSDN上的文档:
该文章中的示例(在 D 节中使用 IGNORE_DUP_KEY 选项):
CREATE TABLE #Test (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);
GO
CREATE UNIQUE INDEX AK_Index ON #Test (C2)
WITH (IGNORE_DUP_KEY = ON);
GO
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());
INSERT INTO #Test SELECT * FROM Production.UnitMeasure;
GO
SELECT COUNT(*)AS [Number of rows] FROM #Test;
GO
DROP TABLE #Test;
GO
Run Code Online (Sandbox Code Playgroud)
对于您的表,这将是命令:
CREATE UNIQUE INDEX UNQ_CustomerMemo ON CustomerMemo (MemoID, CustomerID)
WITH (IGNORE_DUP_KEY = ON);
Run Code Online (Sandbox Code Playgroud)
使用的缺点IGNORE_DUP_KEY是您无法了解哪些数据违反了唯一约束。通常,最好在插入之前确保数据是唯一的,然后当您确实有某些内容出现问题时,您将收到错误以及违反唯一约束的值。这将使插入语句的故障排除更加容易。话虽如此,由于范围有限,我在定义表变量时会自由使用此选项。
至于是否应该使用唯一键或唯一索引,请参阅以下有关堆栈溢出的问题: Unique key vs. unique index on SQL Server 2008
| 归档时间: |
|
| 查看次数: |
14286 次 |
| 最近记录: |