0

트랜잭션 테이블을 업데이트하는 저장 프로 시저를 작성하고 있습니다.SQL Server 2005 저장 프로 시저

는 나는 출하를 업데이트하고있어 경우에 나는 한 번 (선적, 영수증 또는 폐기)

에서 하나 개의 트랜잭션 유형을 업데이트됩니다

, 내가 값을 전달하고 다른 두 개의 빈을 떠날 것이다.

전달하는 값이 NULL (또는 0 중 더 쉬운 것) 일 때 필드를 업데이트하도록 저장 프로 시저를 작성하려면 어떻게해야합니까?

CREATE PROCEDURE [dbo].[sp_UpdateTransaction] 
    -- Add the parameters for the stored procedure here 
    @ID int, 
    @disposalID int, 
    @shipID int, 
    @recID int, 
as 
begin 
    update tblX 
    set 
    disposalID = COALESCE(@disposalID, disposalID) 
    receiptID = COALESCE(@recID, receiptID) 
    shipmentID = COALESCE(@shipID,shipmentID) 
    where ID = @sID 
END 

COALESCE가 작동하지 않는 것

나는 점점 오류를 지킬 때, 나는이 일어날 수 있도록하는 데 사용할 수있는 또 다른 기능이있다 : 내가 지금있는 곳 여기

은?

나는군요 : 근처

의 구문이 잘못되었습니다 'receiptID을'.

나는 :(

감사합니다 이유를 볼 수 없습니다!

+1

** 어떤 데이터베이스 시스템, 어떤 버전을 사용하려고했다 ?? ** 저장 발동이 업체간에 이식하지 않고, 어떤을 위해 SQL 표준위원회에 의해 충분히 표준화되지 모든 데이터베이스 시스템에서 작동하는 의미있는 "일반적인"대답 ..... –

+0

SQL 2005을 사용 중입니다. –

+1

아니요, Microsoft ** SQL ** 서버 ** 2005를 사용하고 있습니다. [SQL] (http :// /en.wikipedia.org/wiki/SQL)은 MS SQL Server, Oracle DBMS, IBM DB2, MySQL, PostgreSQL, Interbase에 의해 구현되는 표준 언어입니다. 따라서이 태그는 일반, 공급 업체 독립적 질문. – rsenna

답변

8

당신이 각 set의 말에 ','을 없기 때문에 또한 수 오류가 발생하는 이유를.

update tblX 
set 
disposalID = COALESCE(@disposalID, disposalID), 
receiptID = COALESCE(@recID, receiptID), 
shipmentID = COALESCE(@shipID,shipmentID) 
where ID = @sID 

대신 SQL 서버를 사용한다고 가정하고 ISNULL()을 사용할 수 있습니다.

+1

ISNULL로 바꿨지 만, 계속 받고 있습니다 : 'receiptID'근처의 구문이 올바르지 않습니다. –

+0

@xrum - '', ''이 (가) 누락 되었기 때문입니다. 내 대답보기 –

+1

감사합니다! 차이점은 내가 COALESCE 또는 ISNULL을 사용하면? 온라인으로 보았을 때 그들은 동일하게 보입니다 .. –

2

당신이 할 수있는 일은 각 업데이트 문을 IF 또는 CASE 문 안에 넣는 것입니다. 같은 :

IF @disposalid is not null: 
    update tblX 
    set disposalID = @disposalID 
1

ISNULL (check_expression , replacement_value)

관련 문제