2

行に複数の値を挿入したいのですが、行が一意であること、つまり重複する行がないことを確認したいと思います。

これを行う方法がわかりません(チェックする値が1つしかない場合、つまり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 に答える