Digamos que eu tenha uma tabela chamada Customer
com uma chave primária e colunas de dados como Name
e DateOfBirth
. Quero escrever um SP chamado que UpdCustomerByKey
receba parâmetros CustomerKey
e Name
.DateOfBirth
O CustomerKey
parâmetro seria obrigatório, mas os parâmetros de dados seriam opcionais. Se não forem fornecidos, a coluna deverá permanecer inalterada.
Geralmente, isso é feito com algo como
CREATE PROCEDURE [UpdCustomer]
(
@CustomerKey BIGINT,
@Name NVARCHAR(100) = NULL,
@DateOfBirth DATETIME = NULL
) AS
BEGIN
UPDATE Customer SET
Name = ISNULL(@Name, Name),
DateOfBirth = ISNULL(@DateOfBirth, DateOfBirth)
WHERE CustomerKey = @CustomerKey
END
Por aqui
UpdCustomer @CustomerKey=123, @DateOfBirth='2000-05-12'
será atualizado DateOfBirth
, deixando Name
inalterado.
O problema com esse design é que ele não permite que o chamador defina colunas de dados como NULL
. Se eu tentasse definir DateOfBirth
assim NULL
:
UpdCustomer @CustomerKey=123, @DateOfBirth=NULL
em vez de definir DateOfBirth
como NULL
, deixaria essa coluna inalterada.
Como mantenho esse design básico, mas permito definir colunas NULL
?