2014-11-11 2 views
0

앨범 ID가 테이블에있는 경우 앨범 세부 정보를 업데이트하는 저장 프로 시저가 있습니다. 그렇지 않으면 새 레코드가 추가됩니다. 사용자가 일부 값을 업데이트하거나 일부 값을 남겨 둘 수 있습니다. 따라서 사용자가 이전 데이터를 업데이트하기위한 값을 남겨두면 테이블에 보관해야합니다. 내가 이전 데이터가 유지되지 않는 설명을 보내지 않은 경우는 무시됩니다SQL 서버에서 COALESCE 사용

UPDATE [dbo].[tbl_M_Album] 

    SET [AlbumName] = @AlbumName 
     ,[ImageName] = @Imagename 
     ,[Description] = coalesce(@Description,[Description]) 
     ,[Imagepath] = @Imagepath 
     ,[UpdatedBy] = @CreatedBy 
     ,[UpdatedDate] = @CreatedDate 
     where AlbumID [email protected] 
     end 

: 내가 SQL에서 coasesce을 활용하는 솔루션을 발견이를 위해 ...

나는 나의 SP를 썼다 빈 데이터. 실수가 있으면 도와주세요.

답변

3

@Description의 값은 비어 있거나 비어 있습니다 (NULL이 아님).

COALESCE 및 기타 널 (NULL) 검사 기능은 ''을 널값으로 처리합니다.

이들은 모두 해당

NULL IS NULL 

'' IS NOT NULL 

' ' IS NOT NULL 

당신이 NULL, '' (빈) 또는 ' ' (공백)을 위해, 당신이,

COALESCE(LEN(TRIM(@Description)), 0) = 0 

를 사용하거나 수를 확인하려면

단지 NULL이며 비어 있습니다.

COALESCE(LEN(@Description), 0) = 0 

그러나 빈 값이나 공백 값을 전달하지 않는 것이 더 효율적입니다.


IF COALESCE(LEN(TRIM(@Description)), 0) = 0 
    UPDATE [dbo].[tbl_M_Album] 
     SET 
       [AlbumName] = @AlbumName 
       ,[ImageName] = @Imagename 
       ,[Imagepath] = @Imagepath 
       ,[UpdatedBy] = @CreatedBy 
       ,[UpdatedDate] = @CreatedDate 
     WHERE 
       [AlbumID] = @AlbumId; 
ELSE 
    UPDATE [dbo].[tbl_M_Album] 
     SET 
       [AlbumName] = @AlbumName 
       ,[ImageName] = @Imagename 
       ,[Description] = @Description 
       ,[Imagepath] = @Imagepath 
       ,[UpdatedBy] = @CreatedBy 
       ,[UpdatedDate] = @CreatedDate 
     WHERE 
       [AlbumID] = @AlbumID; 
0

사용이 쿼리처럼 SP를 다시 작성할 수 있습니다.

UPDATE [dbo].[tbl_M_Album] 

    SET [AlbumName] = @AlbumName 
     ,[ImageName] = @Imagename 
     ,[Description] = Case WHEN (@Description IS NULL OR LTRIM(RTRIM(@Description) = '') 
          THEN [Description] 
          ELSE @Description 
     ,[Imagepath] = @Imagepath 
     ,[UpdatedBy] = @CreatedBy 
     ,[UpdatedDate] = @CreatedDate 
     where AlbumID [email protected] 
     end 
1

@Description에 지정된 값이 빈 문자열 또는 NULL인지 확인하십시오. @Description에 빈 문자열을 전달하면 문제가 발생합니다. NULL 만 전달하면 NULL이 아닌 다음 값으로 "기본값"됩니다 (COALESCE 또는 ISNULL 모두에 적용됨).

희망이 도움이됩니다.