2012-02-06 84 views
6

我試圖以編程方式將值輸入到我的表中。將值插入到where子句中

我不能直接使用Select @variables。我必須使用關鍵字值。

如何在insert into中使用Values時創建where子句。

我試圖避免重複

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子句?你真的試圖插入非重複? – 2012-02-06 19:42:38

+0

是的。試圖避免重複 – 2012-02-06 19:43:35

+0

這不是一個概念。如果您從另一個查詢中選擇數據,那麼'WHERE'子句對數據源有意義。 – HABO 2012-02-06 19:44:47

回答

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

如果你想確保的身份識別碼列不包含任何重複,至少有3個選擇: 1)使列是唯一的(在該列上創建索引並將其聲明爲唯一鍵,或者更好的是主鍵)2)使列自動遞增。這樣,你甚至不需要給它賦值。 4)你可以使用Joe Stefanelli的解決方案(在這個線程上)。它是程序員友好的,並允許你分配任何你想要的值。

3

使用

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 – 2012-02-06 19:50:41

+0

複製是啊你是對的,我沒有看到喬回答,而我張貼.. – 2012-02-06 19:51:36

+0

如果真的我想刪除我的帖子,只是更新我所以我可以刪除我的帖子 – 2012-02-06 19:53:43

0

而且合併嘗試(UPSERT)選項是一個執行一個不錯的選擇。 在這個例子中,匹配的時候沒有填充,但是你可以添加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 2016-07-30 17:35:03

+4

@Tenzin那麼,什麼?這並不意味着人們不再爲同一個問題尋找答案 – DixonD 2016-11-03 14:41:12