Помогите создать оператор INSERT INTO
Я вставляю строки в SQL Server 2005 из PowerShell. Мне нужно добавить предложение WHERE NOT EXISTS в мой код, чтобы прекратить вставку дубликатов. Я тестирую код SQL в SSMS и не могу заставить его работать.
Где ошибка в следующем коде?
INSERT INTO dbo.PrptyValSrce
(PrptySrceName, PrptyNameSrce, PrptyValSrce, PrptyTS)
VALUES
(@property, @propertyDesc, @value, @Timestamp)
WHERE NOT EXISTS
(SELECT * from PrptyValSrce as b
WHERE b.Seqno
AND b.PrptySrceName = @property
AND b.PrptyNameSrce = @propertyDesc
AND b.PrptyValSrce = @value
AND b.PrptyTS = @Timestamp);
3 ответа
Решение
Ваш синтаксис неверен - вы не можете иметь WHERE
оговорка применяется к VALUES
, Попробуй это:
IF NOT EXISTS(
SELECT *
from PrptyValSrce as b
WHERE b.Seqno
AND b.PrptySrceName = @property
AND b.PrptyNameSrce = @propertyDesc
AND b.PrptyValSrce = @value
AND b.PrptyTS = @Timestamp)
BEGIN
INSERT INTO dbo.PrptyValSrce
(PrptySrceName, PrptyNameSrce, PrptyValSrce, PrptyTS)
VALUES
(@property, @propertyDesc, @value, @Timestamp)
END
Вы могли бы также сделать
INSERT INTO dbo.PrptyValSrce
(PrptySrceName, PrptyNameSrce, PrptyValSrce, PrptyTS)
SELECT @property, @propertyDesc, @value, @Timestamp
WHERE NOT EXISTS
(SELECT * from PrptyValSrce as b
WHERE b.Seqno
AND b.PrptySrceName = @property
AND b.PrptyNameSrce = @propertyDesc
AND b.PrptyValSrce = @value
AND b.PrptyTS = @Timestamp);
Вы не можете сделать INSERT....VALUES
и добавить WHERE
пункт к этому. Если вы делаете INSERT...VALUES
эти значения вставляются - период.
Вам необходимо изменить способ проверки:
IF NOT EXISTS((SELECT * from PrptyValSrce as b
WHERE b.Seqno
AND b.PrptySrceName = @property
AND b.PrptyNameSrce = @propertyDesc
AND b.PrptyValSrce = @value
AND b.PrptyTS = @Timestamp)
INSERT INTO dbo.PrptyValSrce
(PrptySrceName, PrptyNameSrce, PrptyValSrce, PrptyTS)
VALUES
(@property, @propertyDesc, @value, @Timestamp)
Сделать IF NOT EXISTS
проверить, и если это удастся, то вы INSERT....VALUES
,