我尝试在项目中第一次使用存储过程。所以如果我尝试使用“if”,“else”,我会出现语法错误。
如果NewProductId等于“0”或null,我不想更新。 否则我想更新我的NewProductId
ALTER PROCEDURE MyProcedured
(
@CustomerId INT,
@CustomerName VARCHAR(80),
@NewProductId INT
)
AS
BEGIN
UPDATE CUSTOMERS
SET
CustomerName =@CustomerName ,
if(@ProductId !=null && @ProductId !=0)
{
ProductId =@NewProductId
}
WHERE CustomerId = @CustomerId
END
答案 0 :(得分:2)
T-SQL不是C#
if @NewProductId is not null and @NewProductId <> 0
BEGIN
UPDATE CUSTOMERS SET CustomerName =@CustomerName,
ProductId =@NewProductId
WHERE CustomerId = @CustomerId
END
ELSE
BEGIN
UPDATE CUSTOMERS SET CustomerName =@CustomerName
WHERE CustomerId = @CustomerId
END
另请注意,您没有任何名为@ProductID
的变量。我想你想测试@NewProductID
答案 1 :(得分:2)
看起来你正在混合使用两种不同的语言(C#with SQL)。建议使用SQL CASE
语句来执行此操作:
ALTER PROCEDURE MyProcedured
(@CustomerId INT,
@CustomerName VARCHAR(80),
@NewProductId INT)
AS
BEGIN
UPDATE CUSTOMERS
SET CustomerName = @CustomerName,
ProductId = CASE WHEN @ProductId IS NOT NULL AND ProductId <> 0
THEN @NewProductId
ELSE ProductId
END
WHERE CustomerId = @CustomerId
END
答案 2 :(得分:0)
!=
符号不正确,应该是<>
。
if(@ProductId <> null && @ProductId <> 0)
或者替代
if(@ProductId is not null && @ProductId <> 0)
答案 3 :(得分:0)
if @ProductId is not null and @ProductId <> 0
begin
set @ProductId = @NewProductId
end