2013-09-28 2 views
0

내 프로 시저에서 저장 프로 시저를 처음 사용하려고합니다. 그래서 "if", "else"를 사용하려고하면 구문 오류가 발생합니다.저장 프로 시저 else 구문 오류

NewProductId가 "0"또는 null 인 경우 업데이트하고 싶지 않습니다. 다른 I는 != 기호 대신 <>을해야 잘못 내 NewProductId

ALTER PROCEDURE MyProcedured 
(
@CustomerId INT, 
@CustomerName VARCHAR(80), 
@NewProductId INT 
) 
AS 
BEGIN 
UPDATE CUSTOMERS 
SET  
CustomerName [email protected] , 

if(@ProductId !=null && @ProductId !=0) 
{ 
ProductId [email protected] 
} 

WHERE CustomerId = @CustomerId 
END 

답변

2

두 가지 다른 언어 (C#과 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 
0

를 업데이트합니다.

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

또는 다른 방법으로

if(@ProductId is not null && @ProductId <> 0) 
0
if @ProductId is not null and @ProductId <> 0 
begin 
    set @ProductId = @NewProductId 
end 
2

T-SQL은 또한 당신이 어떤 변수가 @ProductID 이름이없는 것을 알 수

if @NewProductId is not null and @NewProductId <> 0 
BEGIN 
    UPDATE CUSTOMERS SET CustomerName [email protected], 
         ProductId [email protected] 
    WHERE CustomerId = @CustomerId 
END 
ELSE 
BEGIN 
    UPDATE CUSTOMERS SET CustomerName [email protected] 
    WHERE CustomerId = @CustomerId 
END 

C#

없습니다. 나는 당신이 그 값을 테스트하기를 원한다고 가정합니다. @NewProductID