我的 sql 查询有问题吗? 我有一个错误:
Incorrect syntax near the keyword '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 表图:
最佳答案
你的sql语句有几处错误。
- 使用字符串连接代替参数。
- 隐式(旧式)连接的使用。显式连接作为 Ansi-Sql 的一部分已有 25 年多了(我相信接近 30 年),因此确实没有理由编写隐式连接。
- 在 values 子句中使用子查询 - 而不是简单地
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 的事实 - 您应该查找表值参数来解决该问题。
关于c# - 如果在 ASP.NET 中不存在,sql server 的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790859/