Помогите создать оператор INSERT INTO - PullRequest
1 голос
/ 28 июня 2010

Я вставляю строки в 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 ]

1 голос
/ 28 июня 2010

Вы не можете сделать 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.

1 голос
/ 28 июня 2010

Вы также можете сделать

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);
1 голос
/ 28 июня 2010

Ваш синтаксис недействителен - вы не можете применить предложение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...