如果在sql中不存在则插入

时间:2013-10-25 10:38:20

标签: asp.net sql sql-server vb.net

我正在使用ms visual studio 2012和ms sql 2012。

在我的asp.net VB页面上,我有4个文本框,用户可以输入值并单击插入。然后将这些值与日期,用户名和整数一起传递给sql,子例程执行第一个文本框值,然后传递第二个,依此类推。

我的问题在于存储过程。我使用IF不存在来查看表中的当前数据,如果没有匹配日期和整数的数据,那么它将插入记录。然后VB子将传递第二组数据,它将再次查看日期是否与整数一起出现,依此类推。存储过程如下:

@price money,
@datesubmitted datetime,
@commodityID int,
@submitted_By nvarchar(10)

As
    begin
    if not exists ((select * from dailyPricing where (convert(date, datesubmitted, 103) = convert(date, @datesubmitted, 103) and commodityID = 1)
    or
    (convert(date, datesubmitted, 103) = convert(date, @datesubmitted, 103) and commodityID = 2)
    or
    (convert(date, datesubmitted, 103) = convert(date, @datesubmitted, 103) and commodityID = 3)
    or
    (convert(date, datesubmitted, 103) = convert(date, @datesubmitted, 103) and commodityID = 4)))
    Begin
    INSERT INTO dailyPricing (price, datesubmitted, commodityID, submitted_By)
    values(@price, @datesubmitted, @commodityID, @submitted_By)

end
end

上述结果是它只输入第一组值而不是第二组,第三组或第四组。我已经调试了我的VB代码并且它正常工作我只是认为我没有正确地构建SQL。

1 个答案:

答案 0 :(得分:1)

我认为您需要为每次检查重写“不存在”,尝试这样的事情,我认为您需要更新它们可能错误的括号:

if not exists ((select * from dailyPricing where 
  (convert(date, datesubmitted, 103)
     = convert(date, @datesubmitted, 103) and commodityID = 1)

if not exists ((select * from dailyPricing where 
   (convert(date, datesubmitted, 103) 
     = convert(date, @datesubmitted, 103) and commodityID = 2)

或 ....