SQL Server : Case 문에서 UniqueIdentifier를 문자열로 변환


136

때때로 예외 스택 추적이있는 메시지 열이있는 로그 테이블이 있습니다. 메시지에 이것이 있는지 여부를 결정하는 몇 가지 기준이 있습니다. 고객에게이 메시지를 표시하고 싶지는 않지만 대신 다음과 같은 메시지가 표시됩니다.

내부 오류가 발생했습니다. 참조 코드 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx로 문의하십시오.

여기서 xxx etc는 테이블의 guid 열입니다. 저장된 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

RequestIDSQL Server의 Guid 데이터 유형이며 여기서 문자열로 변환되지 않습니다. Guid를 문자열로 변환하는 방법에 대한 코드를 보았지만 여러 줄로 표시되어 있으며 case 문에서 작동하지 않을 것이라고 생각합니다. 어떤 아이디어?

답변:


257

나는 대답을 찾았다 고 생각한다.

convert(nvarchar(50), RequestID)

이 정보를 찾은 링크는 다음과 같습니다.

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


21
또는 cast (RequestID as varchar (50))
MK_Dev

3
cast ()와 convert ()의 기본 차이점은 무엇입니까?
RK Sharma

5
@RKSharma 이것은 stackoverflow.com에 요청하거나 누군가가 이미 답변했는지 확인하기 위해이 사이트를 검색하는 데 완벽한 질문입니다.
aarona

1
왜 내가 nvarchar더 적게 고르는 지 모르겠다 nvarchar(50). 텍스트 값으로 변환 될 때 고유 식별자는 16 진-대시 -36으로 처리됩니다.
user2864740

9
다른 답변에서 알 수 있듯이 이것을 압축 할 수 있습니다 cast(RequestID as char(36)).
Frank Tan

90

여기서 변환 기능을 사용할 수 있지만 고유 식별자 값을 보유하기에 36 자이면 충분합니다.

convert(nvarchar(36), requestID) as requestID

2
길이는 고정되어 있기 때문에 varchar (36)도 충분합니다
gdbdable

11
당신은 같은 문장에서 "fixed"와 "varchar"를 말합니다 ... 어떻 char(36)습니까? 을 사용할 수도 nchar(36)있지만 GUID에는 유니 코드가 포함되어 있지 않으므로 아무것도 사지 않습니다. 반대로 작업 char은 일반적으로보다 빠릅니다 varchar.
r2evans 2016 년

47

제 생각에 uniqueidentifier/ GUID는 a varcharnvarchar아니라 a char(36)입니다. 따라서 다음을 사용합니다.

CAST(xyz AS char(36))

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.