SQL类型IGNORE_DUP_KEY

时间:2018-08-14 11:41:39

标签: sql sql-server types

CREATE TYPE [dbo].[IdList] AS TABLE ([Id] [int] NULL)
GO

如何在一个类型中多次插入相同的值?

猜猜它类似于IGNORE_DUP_KEY,但我似乎无法上班

2 个答案:

答案 0 :(得分:1)

如果列上没有键或索引(因为在您给出的语句中没有键或索引),则对于在表中多次插入相同的值已经没有限制。

DECLARE @i IdList
INSERT @i VALUES (1), (1), (1)

就可以了。如果您想使用IGNORE_DUP_KEY选项来拥有唯一索引,那么如果该值已经存在,则插入将被丢弃,而不是产生约束冲突,您可以通过在声明中包括该选项的唯一索引来实现:

CREATE TYPE [dbo].[IdList] AS TABLE (
    [Id] [int] NULL, 
    INDEX IX_IdList_Id UNIQUE(ID) WITH (IGNORE_DUP_KEY = ON)
);

或使用主键(对于不可为空的列):

CREATE TYPE [dbo].[IdList] AS TABLE ([Id] [int] PRIMARY KEY WITH (IGNORE_DUP_KEY = ON));

注意这一点,因为静默丢弃重复值可能是掩盖处理过程中基本问题的真正好方法。 SQL Server确实会生成信息性消息“忽略了重复的密钥”,但是该消息本身很容易被忽略(并且没有提供有关哪些密钥的详细信息)。

答案 1 :(得分:0)

Jeroen Mostert确实告诉我只是去掉了钥匙,而我确实做了蚂蚁