2017-04-18 47 views
0

我正在嘗試使用允許我插入具有不同ID的記錄的代碼;如果數據庫中已存在相同的ID,則不應該插入該記錄。只有在數據庫中插入數據(如果它不存在)

我的SQL代碼是這樣的:

SqlCommand cmd = new SqlCommand("insert into User(UserId,Name,Profession) values(@UserId,@Name,@Profession) WHERE NOT EXISTS (Select UserId From User where UserId = @UserId)", con); 

但它不工作,當我嘗試這一點,沒有被添加到數據庫中。 如何更正此查詢?

謝謝

+0

嘗試使用'NOT IN',同時在使用select進行插入時,您需要刪除值,因爲您選擇了所述值 –

+0

請注意,自己做的在所有情況下都不會阻止userId的重複。 –

回答

2

相反的:

insert into User(UserId,Name,Profession) 
     values(@UserId,@Name,@Profession) 
     WHERE NOT EXISTS (Select UserId From User where UserId = @UserId) 

使用此查詢:

insert into User(UserId,Name,Profession) 
     select @UserId, @Name, @Profession 
     where not exists (Select UserId From User where UserId = @UserId) 

說明:AFAIK insert命令不能組合VALUES和WHERE子句。但不是直接提供值(使用VALUES子句),您可以定義一個SELECT來指示要插入的值。在那個SELECT上你現在可以使用過濾器,連接等等,所以你可以在那裏定義你的過濾器檢查行是否仍然存在。

+1

如果你描述,爲什麼,這將是一個正確的答案:) – swe

2

試試這個:

SqlCommand cmd = new SqlCommand("IF NOT EXISTS (Select UserId From User where UserId = @UserId) insert into User(UserId,Name,Profession) values(@UserId,@Name,@Profession) ", con); 
+0

現在有效,謝謝! – User001122

+0

您的歡迎。 :) –

1

如果NOT EXISTS(SELECT用戶ID從用戶其中userid = @UserId 插入到用戶(用戶ID,姓名,職業)值(@ UserId,@ Name,@ Profession) 將適用於SQL服務器

相關問題