更新存储过程 - 仅更新某些字段并保留其他字段

kil*_*ild 3 sql t-sql sql-server

我目前正在制作一个存储过程,它将更新产品详细信息.我想做(如果可能的话),以便在执行时只更新在'values'列下输入的字段,其余的保持不变.

ALTER PROCEDURE [dbo].[spUpdateProduct]
@ProductID int, @Brand nvarchar(30), @ModelNo nvarchar(9), @Description 
nvarchar(50), @CostPrice decimal(6,2), @Stock int, @SalePrice decimal(6,2)  

AS
BEGIN
SET NOCOUNT ON

UPDATE tblProduct 
SET                 
    Brand = @Brand,
    ModelNo = @ModelNo,
    [Description] = @Description,
    CostPrice = @CostPrice,
    Stock = @Stock,
    SalePrice = @SalePrice

WHERE ProductID = @ProductID 

END
Run Code Online (Sandbox Code Playgroud)

这是我现在所拥有的.当我去改变一个值时,它错误地说我没有输入'Brand'的值,这是'ProductID'之后的下一个值.

执行窗口

尝试更新两个字段时出错(ProductID和CostPrice)

编辑:当我创建表时,字段都设置为'not null'.

r.n*_*net 6

我就是这样做的.具有无效参数

ALTER PROCEDURE [dbo].[spUpdateProduct]
@ProductID int, 
@Brand nvarchar(30) = null, 
@ModelNo nvarchar(9) = null, ..... (to all the parameters except @ProductID)

AS
BEGIN
SET NOCOUNT ON

UPDATE tblProduct 
SET                 
    Brand = isNull(@Brand, Brand),
    ModelNo = isNull(@ModelNo, ModelNo),
    [Description] = isNull(@Description, Description),...


WHERE ProductID = @ProductID 

END
Run Code Online (Sandbox Code Playgroud)

基本上,如果参数不为null,则只更新字段,否则保留旧值.