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'.
我就是这样做的.具有无效参数
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,则只更新字段,否则保留旧值.