2012-02-06 14 views
6

テーブルに値をプログラムで入力しようとしています。where句で値を挿入する

私はストレートSelect @variablesを使用できません。私はキーワードValuesを使用する必要があります。

Insert intoの値を使用する場合、どのようにwhere句を作成できますか。私はあなたがのMyID列が任意の重複が含まれていないことを確認してくださいしようとしている場合、あなたは少なくとも3つの選択肢があり、重複に

DECLARE @MyID INT 
    DECLARE @Phone varchar(10) 
    DECLARE @MyDATE DateTime 
    DECLARE @Agent as varchar(50) 
    DECLARE @Charge as varchar(50) 
    DECLARE @Vendor as varchar(50) 

    SET @MyID = 215199999 
    SET @Phone = '9999999999' 
    SET @MyDATE = '2010-12-04 11:56:12.000' 
    SET @Agent = 'fbrown' 
    SET @Charge = 'NO' 
    SET @Vendor = 'NO' 

    INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) WHERE MyID NOT IN (@MyID) 
+0

なぜ挿入節にwhere句を使用しますか?あなたは実際に非重複を挿入しようとしていますか? –

+0

はい。重複を避けることを試みている –

+0

それは概念ではありません。別のクエリからデータを選択している場合、 'WHERE'節がデータソースに意味を持ちます。 – HABO

答えて

22
IF NOT EXISTS(SELECT 1 FROM [MyDB].[dbo].[Accounts] WHERE MyID = @MyID) 
    INSERT INTO [MyDB].[dbo].[Accounts] 
     (MyID, Phone, MyDate, Agent, Charge, Vendor) 
     VALUES 
     (@MyID, @Phone, @MyDATE, @Agent, @Charge, @Vendor) 
1

を避けるためにしようとしています

: 1)を作ります一意の列(その列にインデックスを作成して一意であると宣言するか、または主キーとするのが良い) 2)列を自動インクリメントにします。この方法では、値を割り当てる必要はありません。 4)あなたはJoe Stefanelliのソリューションを(このスレッドで)使用できます。それはプログラマーにやさしく、あなたが望む任意の値を割り当てることができます。

3

またマージ(UPSERT)オプションを

if not exists (select top 1 * from [MyDB].[dbo].[Accounts] Where MyID = @MyID) 
INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) 
+2

これはhttp://stackoverflow.com/a/9166197/496972の複製です –

+0

私が投稿している間にジョーの答えを見たことがありません。 –

+0

本当に私の投稿を削除したい場合は、ただ更新してください私は私の投稿を削除することができます –

0

を使用してみてくださいは、単一の実行に適したオプションです。 この例では、一致するものが入力されていませんが、WHENの一致したステートメントを追加して、タイムスタンプまたはカウンタを更新できます。

MERGE 
    Accounts AS target 
USING 
(select @MyID as myID) AS source 
ON 
    target.myID = source.myID 

WHEN NOT MATCHED THEN 
INSERT (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
); 
+0

Psこのトピックは4,5歳です。 :-) – Tenzin

+4

@Tenzinだから何?それは、人々が同じ質問に対する回答をもう探していないことを意味するものではありません – DixonD