Можем ли мы добавить несколько операторов обновления на основе определенных условий в хранимую процедуру

#sql-server #stored-procedures #sql-update

#sql-server #хранимые процедуры #sql-update

Вопрос:

Я хочу создать хранимую процедуру в mssql. На основе входных параметров соответствующая таблица должна обновляться. Например.

 CREATE PROCEDURE sp_submitex
AS
    @type int,
    @ex_cde varchar(10)
BEGIN
    IF @type = 2 THEN
       UPDATE t1 
       SET code = @ex_cde
 
    ELSE IF @type = 3 THEN
       UPDATE t2 
       SET code = @ex_cde

    ELSE IF @type = 7 THEN
       UPDATE t3 
       SET code = @ex_cde
 

t1,t2,t3 это три разные таблицы.

Возможно ли реализовать вышеуказанное требование (которое я упомянул в инструкциях IF else) в хранимой процедуре?

Не уверен, что это может работать с оператором case.

Комментарии:

1. Примечание: вы не должны использовать sp_ префикс для своих хранимых процедур. Microsoft зарезервировала этот префикс для собственного использования (см. раздел Именование хранимых процедур ) , и вы рискуете столкнуться с конфликтом имен в будущем. Это также плохо сказывается на производительности вашей хранимой процедуры . Лучше всего просто избегать sp_ и использовать что-то другое в качестве префикса — или вообще без префикса!

2.Да, вы должны быть в состоянии это сделать — отбросьте THEN , хотя — не требуется / разрешено. И НЕТ, CASE выражение здесь вам не поможет — это выражение, которое может возвращать единственное атомарное значение (из нескольких вариантов), но его нельзя использовать для выполнения блоков кода на основе условий. Небольшая деталь: AS после параметров (прямо перед BEGIN )

3. Если вы хотите выполнить несколько операторов в IF / ELSE , тогда вам нужно использовать BEGIN and END , not THEN (как упоминает marc_s). THEN Здесь будет работать простое удаление ‘s, а также добавление END и исправление первоначального объявления процедуры.

4. Вам нужно будет использовать IF , а не CASE . CASE это выражение, а не оператор потока управления. в T-SQL.

5. Спасибо всем за ваш вклад. Позвольте мне попробовать внести изменения, как указано.