#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
andEND
, notTHEN
(как упоминает marc_s).THEN
Здесь будет работать простое удаление ‘s, а также добавлениеEND
и исправление первоначального объявления процедуры.4. Вам нужно будет использовать
IF
, а неCASE
.CASE
это выражение, а не оператор потока управления. в T-SQL.5. Спасибо всем за ваш вклад. Позвольте мне попробовать внести изменения, как указано.