如何插入记录并确保整行是唯一的

时间:2012-07-16 22:57:47

标签: sql

我想在一行中插入多个值,但我想确保该行是唯一的,即没有重复的行。

我不确定如何做到这一点(如果只检查一个值就很容易,例如:SQL Server - How to insert a record and make sure it is unique)。

这是我的代码,但它不允许我插入唯一的行,因为它会测试单列和多列的组合。

CREATE TABLE myCities (
    UserID int null,
    CityID int null 
)

DECLARE @UserID int, @CityID int
SET @UserID = 1
SET @CityID = 1

INSERT INTO myCities (UserID,CityID) 
SELECT @UserID,@CityID
        WHERE 
            @UserID NOT IN ( SELECT UserID FROM myCities WHERE UserID = @UserID )
        AND 
            @CityID NOT IN ( SELECT CityID FROM myCities WHERE CityID = @CityID )

2 个答案:

答案 0 :(得分:4)

有时显而易见就在眼前 - 使用NOT EXISTS来解决它,就像这样:

INSERT INTO myCities (UserID,CityID) 
SELECT @UserID,@CityID
        WHERE NOT EXISTS ( 
                   SELECT UserID FROM myCities 
                   WHERE 
                   UserID = @UserID and 
                   CityID = @CityID
                 )

答案 1 :(得分:4)

唯一可靠的方法是将支票放入数据库。在这种情况下,在表上创建一个唯一键,它也是它的主键,所以

-- syntax for MS/Sybase at least is
ALTER TABLE myCities
ADD CONSTRAINT uc_myCities UNIQUE (UserID,CityID)

然后,当您插入副本时,您将收到错误,您的代码将不得不处理它。