1

PowerShell から SQL Server 2005 に行を挿入しています。重複の挿入を停止するには、コードに WHERE NOT EXISTS 句を追加する必要があります。SSMS で SQL コードをテストしていますが、動作させることができません。

次のコードのどこが間違っていますか?

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

3 に答える 3

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);
于 2010-06-28T09:04:52.397 に答える
1

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
于 2010-06-28T09:01:59.933 に答える
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.

于 2010-06-28T09:02:13.177 に答える