source

SQL Server: UniqueIdentifier를 케이스 스테이트먼트 문자열로 변환

lovecheck 2023. 4. 7. 21:33
반응형

SQL Server: UniqueIdentifier를 케이스 스테이트먼트 문자열로 변환

로그 테이블에는 예외 스택트레이스가 있는 경우가 있는 메시지컬럼이 있어요메시지에 이 내용이 포함되어 있는지 여부를 판단하는 기준이 있습니다.고객에게 이러한 메시지를 표시하는 것이 아니라 다음과 같은 메시지를 전달하고 싶습니다.

내부 오류가 발생했습니다.참조 코드 xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxxxxxx

여기서 xxx 등은 테이블의 GUID 컬럼입니다.stored proc를 다음과 같이 쓰고 있습니다.

declare @exceptionCriteria nvarchar(50)
select @exceptionCriteria = '%<enter criteria etc>%'

select LogDate,
       case
       when Message like @exceptionCriteria
       then 'Internal Error Occured. Reference Code: ' + str(RequestID)
       else Message
       end
  from UpdateQueue

RequestID는 SQL Server의 GUID 데이터 유형이며 여기서는 문자열로 변환하지 않습니다.GUID를 문자열로 변환하는 방법에 대한 몇 가지 코드를 보았습니다만, 여러 줄의 GUID가 있기 때문에 케이스 스테이트먼트에서는 사용할 수 없다고 생각합니다.좋은 생각 있어요?

답을 찾은 것 같아

convert(nvarchar(36), RequestID)

다음 링크에서 다음 정보를 찾을 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms187928.aspx

여기서 변환 함수를 사용할 수 있지만 고유 식별자 값을 유지하려면 36자로 충분합니다.

convert(nvarchar(36), requestID) as requestID

편집: 네, 댓글에 기재되어 있듯이 char 또는 nchar 또는 ASCII 문자 테이블을 적절히 조작할 수 있는 함수가 유효합니다.그래서 저는 보통 다국어/다자릿 환경에서 일하고 있고, 항상 nvarchar를 사용하는 것이 원칙입니다.그게 내 쉬운 방법이야, 미안해.또한 조만간 데이터베이스 소프트웨어에서 ASCII 이외의 요소를 가진 고유 식별자를 생성하기 시작하면 준비가 완료됩니다.

제 생각에는uniqueidentifier/ GUID는 어느 쪽도 아닙니다.varchar어느 쪽도nvarchar단,char(36)따라서 다음을 사용합니다.

CAST(xyz AS char(36))

대신Str(RequestID),해라convert(varchar(38), RequestID)

언급URL : https://stackoverflow.com/questions/6299918/sql-server-converting-uniqueidentifier-to-string-in-a-case-statement

반응형