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

2 つの異なる言語 (C# と SQL) を混在させているようです。CASEこれを行うには、SQL ステートメントを使用することをお勧めします。

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 に答える
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 に答える
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 に答える