0

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

4 回答 4

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

于 2013-09-28T15:05:46.407 回答
2

看起来您正在混合两种不同的语言(C# 和 SQL)。建议使用 SQLCASE语句来执行此操作:

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
于 2013-09-28T15:07:01.100 回答
0

标志不正确,!=应该是<>

if(@ProductId <> null && @ProductId <> 0)

或交替

if(@ProductId is not null && @ProductId <> 0)
于 2013-09-28T15:03:15.347 回答
0
if @ProductId is not null and @ProductId <> 0
begin
    set @ProductId = @NewProductId 
end
于 2013-09-28T15:03:51.313 回答