我的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表图:
答案 0 :(得分:5)
sql语句中有几处错误。
insert...select
。insert...select
语句begin
和end
关键字定义一个代码块,与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);