SQL Server使用情况,如果ASP.NET中不存在?

时间:2019-06-27 12:19:54

标签: c# asp.net sql-server

我的sql查询中有什么问题吗? 我遇到错误:

  

关键字“ join”附近的语法不正确。

  protected void Button1_Click1(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            if ((row.FindControl("CheckBox1") as CheckBox).Checked)
            {
                //string prNB = Session["prnb"].ToString();
                SqlCommand cmd = new SqlCommand("insert into PrescTest(Test, idPresc)select @Test, idPresc from Prescription where prNB = @prNB and not exists(select test from PrescTest pt,join Prescription p on pt.idPresc = p.idPresc where prNB = @prNB)", conn);
                cmd.Parameters.Add("Test", SqlDbType.NVarChar, 50).Value = row.Cells[2].Text;
                cmd.Parameters.Add("prNB", SqlDbType.NVarChar, 50).Value = Session["prnb"].ToString();
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
        Response.Redirect("PrescForm.aspx");
    }

Sql表图:

enter image description here

3 个答案:

答案 0 :(得分:5)

sql语句中有几处错误。

  • 字符串串联而不是参数的用法。
  • 隐式(旧样式)连接的用法。显式联接已成为Ansi-Sql的一部分,至今已有25年之久了(我相信接近30个),因此编写隐式联接确实没有任何借口。
  • values子句中子查询的用法-而不是简单的insert...select
  • 您对网格中的每一行运行此查询,而不是从网格中收集数据并运行单个insert...select语句
  • beginend关键字定义一个代码块,与c#中的{}相似-begin关键字之后的右括号是多余的(我认为也是语法错误)。 end关键字后的右括号也是如此

您的SQL语句的快速修复方法是:

insert into PrescTest (Test,idPresc) 
select @Test, idPresc 
from Prescription 
where prNB = @prNB
and not exists(
    select test 
    from PrescTest pt 
    join Prescription p 
        on pt.idPresc = p.idPresc
    where prNB = @prNB 
)

请注意,not exists已移到where子句中,因此实际上不需要if

请注意,这不能解决您正在逐行运行此sql的事实-您应该查找表值参数来解决该问题。

答案 1 :(得分:1)

这是您的查询。会起作用

if not exists(select test from PrescTest pt, Prescription p where prNB ="+ prNB +"and pt.idPresc = p.idPresc) begin insert into PrescTest (Test,idPresc) values (@Test,(select idPresc from Prescription where prNB=" + prNB + "))end

答案 2 :(得分:0)

在“结束”之前缺少两个右括号?

... + prNB + "))end))", conn);