存储过程if else语法错误

时间:2013-09-28 15:01:09

标签: sql stored-procedures if-statement

我尝试在项目中第一次使用存储过程。所以如果我尝试使用“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

4 个答案:

答案 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