Разработчик приложения попросил меня создать три разные хранимые процедуры для обновления одной и той же таблицы. Каждая хранимая процедура обновляет разные столбцы и вызывается в разных точках своего приложения. Я знаю, что должен быть способ создать одну комбинированную хранимую процедуру, которая могла бы выполнять эту работу.
Сначала я попытался создать хранимую процедуру с параметром «switch», который обновлял бы столбцы каждой хранимой процедуры на основе параметра switch.
CREATE PROCEDURE dbo.[Upd_table1]
(@switch INT, @ID INT,
@col1 INT, @col2 INT, @col3 INT, @col4 INT, @col5 INT,
@col6 INT, @col7 INT, @col8 INT, @col9 INT)
AS
BEGIN
IF (@switch = 1)
UPDATE dbo.table1
SET col1 = @col1, col4 = @col4, col5 = @col5, col6 = @col6
WHERE ID = @ID
ELSE IF (@switch = 2)
UPDATE dbo.table1
SET col2 = @col2, col9 = @col9
WHERE ID = @ID
ELSE IF (@switch = 3)
UPDATE dbo.table1
SET col3 = @col3, col7 = @col7, col8 = @col8
WHERE ID = @ID
END
Это работает, как и ожидалось, но мне было интересно, есть ли способ удалить коммутатор и обновить таблицу, указав все параметры.