我想在一行中插入多个值,但我想确保该行是唯一的,即没有重复的行。
我不确定如何做到这一点(如果只检查一个值就很容易,例如: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 )
答案 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)
然后,当您插入副本时,您将收到错误,您的代码将不得不处理它。