Asp.net 如果sql中不存在,则插入

Asp.net 如果sql中不存在,则插入,asp.net,sql,sql-server,vb.net,Asp.net,Sql,Sql Server,Vb.net,我正在使用ms visual studio 2012和ms sql 2012 在我的asp.net VB页面上,我有4个文本框,用户可以输入值并单击“插入”。然后,这些值与日期、用户名和整数一起通过子例程传递给sql,该子例程先处理第一个文本框值,然后处理第二个文本框值,依此类推 我的问题是存储过程。我使用IF NOT exist来查看表中的当前数据,如果没有与日期和整数匹配的数据,那么它将插入记录。然后,VB子系统将第二组数据传入,它将再次查看日期是否与整数一起存在,依此类推。存储过程如下所示

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

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

我的问题是存储过程。我使用IF NOT exist来查看表中的当前数据,如果没有与日期和整数匹配的数据,那么它将插入记录。然后,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。

我认为你需要为每次检查重写“不存在”的内容。尝试类似的方法,我认为你需要更新括号,它们可能是错误的:

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


..

您需要使用MERGE语句,如下所示:在您的exists中,您总是比较@commodityID。您是否打算比较您的数据库字段commodityID?它应该查看数据库中的日期是否与@datesubmitted匹配,是否有匹配1、2、3或4的commodityID。如果没有,则插入行。我还编辑了我上面的代码,删除了@preceding commodityID。这与
asp.net
有什么关系?谢谢谢哈尔,我用了你的例子,但我删除了if'或最后3条语句,所以它刚开始不存在
if not exists ((select * from dailyPricing where 
   (convert(date, datesubmitted, 103) 
     = convert(date, @datesubmitted, 103) and commodityID = 2)