2016-11-16 4 views
0

Я хочу вставить в таблицу Files-Favorites только в том случае, если значения, которые я пытаюсь передать, уже там не находятся.SQL Server: INSERT с условием

Я пробовал:

INSERT INTO [Files-Favorites](fileID,auditorID) 
    VALUES ('1', '34') 
     WHERE (fileID != '1' 
     AND auditorID != '34') 

Это не работает. Я стараюсь не дублировать значения INSERT. Как это сделать? Это для Microsoft SQL Server 2005.

Спасибо

ответ

5

Попробуйте использовать, если не существует

IF NOT EXISTS(SELECT * FROM [Files-Favorites] WHERE fileID = '1' AND auditorID = '34') 
BEGIN 
    INSERT INTO [Files-Favorites](fileID, auditorID) 
    VALUES('1', '34') 
END 
2

я хотел бы использовать композит (несколько столбцов) ключ, а не проверять на каждой вставке

ALTER TABLE [Files-Favorites] ADD CONSTRAINT unique_1 UNIQUE(fileID,auditorID) 
+0

это далеко за пределами меня, не зная, что вы имеете в виду здесь – Damien

+0

вы можете добавить уникальное ограничение для предотвращения дублирования данных. Не рекомендуется проверять каждую вставку. – sumit

0

Мы можем использовать EXISTS с подзапросом, чтобы проверить наличие данных и вставки соответственно:

INSERT INTO [Files-Favorites](fileID,auditorID) 
SELECT fileID, auditorID FROM (
SELECT '1' fileID,'34' auditorID) t 
WHERE NOT EXISTS(SELECT tm.fileID FROM [Files-Favorites] tm 
       WHERE tm.fileID = t.fileID AND tm.auditorID = t.auditorID) 

 Смежные вопросы

  • Нет связанных вопросов^_^