2

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

我不确定如何执行此操作(如果只有一个值要检查,这很容易,例如:SQL Server - 如何插入记录并确保它是唯一的)。

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

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 )
4

2 回答 2

5

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

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

然后,当您插入重复项时,您将收到一个错误,您的代码将不得不处理它。

于 2012-07-16T23:06:49.447 回答
4

有时显而易见的事情就在眼前 - 使用 解决它NOT EXISTS,如下所示:

INSERT INTO myCities (UserID,CityID) 
SELECT @UserID,@CityID
        WHERE NOT EXISTS ( 
                   SELECT UserID FROM myCities 
                   WHERE 
                   UserID = @UserID and 
                   CityID = @CityID
                 )
于 2012-07-16T22:59:57.093 回答