Использование сервера SQL, если не существует в ASP.NET? - PullRequest
0 голосов
/ 27 июня 2019

Что-то не так в моем sql Query?У меня ошибка:

Неверный синтаксис рядом с ключевым словом '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 ]

5 голосов
/ 27 июня 2019

В вашем выражении 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 для каждой строки в отдельности - вы должны посмотреть табличные параметры, чтобы решить эту проблему.

1 голос
/ 27 июня 2019

Вот ваш запрос.Это будет работать

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
0 голосов
/ 27 июня 2019

Две пропущенные закрывающие скобки перед «концом»?

... + prNB + "))end))", conn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...