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