2010-06-28 71 views
1

我將行從PowerShell插入到SQL Server 2005中。我需要爲我的代碼添加一個WHERE NOT EXISTS子句來停止插入重複項。我正在測試SSMS中的SQL代碼,無法使其工作。幫助創建INSERT INTO語句

以下代碼中的錯誤在哪裏?

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); 
+1

什麼是錯誤訊息? – amelvin 2010-06-28 08:57:59

回答

1

你的語法是無效的 - 你不能適用於VALUES一個WHERE條款。試試這個:

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 
+0

darn - 打我13秒....但那BEGIN ... END對真的不需要...(只是挑剔) – 2010-06-28 09:02:49

+0

非常感謝,無法理解爲什麼選擇..不存在的工作和插入...沒有 – Andrew 2010-06-28 09:09:27

1

你不能做一個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

你也可以做

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);