의 "nvarchar 값을 데이터 형식 int로 변환 할 때 변환이 실패했습니다"다음 쿼리는 앞에서 설명한 오류를 반환합니다. 열 WNT.USER.PriviligeLevel_SV에는 값 1,2,3 또는 다른 오류가 있습니다. 나는 값이 1이면 'Administrator'를 반환하고 값이 2이면 'Guest'를 반환하고 값이 3이면 'User'를 반환하도록해야합니다. 그렇지 않으면이 열에 축 어적 오류 메시지가 포함되어야합니다. ELSE CAST([Wnt.User.PrivilegeLevel_SV] AS nvarchar)
및 WHEN [Wnt.User.PrivilegeLevel_SV] NOT LIKE '%[^0-9]%'
을 사용해 보았지만 어느 것도 작동하지 않았습니다. 제발 조언.CASE 문
SELECT [Wnt.User.Host] AS 'Machine Name',
"Account Privilege Level" =
CASE
When [Wnt.User.PrivilegeLevel_SV] = 1 Then 'Administrator'
When [Wnt.User.PrivilegeLevel_SV] = 2 Then 'User'
When [Wnt.User.PrivilegeLevel_SV] = 3 Then 'Guest'
Else [Wnt.User.PrivilegeLevel_SV]
End
FROM [Prod].[AdHoc].[TestBuffer]
SQL 버전은 2008이며, WNT.USER.PriviligeLevel_SV 열이 NVARCHAR (최대)
아니요, 문제는 '의해 평가 된'값이 아니지만 case 문에서 '반환 된 값'입니다. – DrCopyPaste
case 문은 전체 테이블에서 일치하는 항목을 검색하므로 int와 varchar의 비교가 발생하면 오류가 발생합니다. 이들이 모두 문자열 유형이기 때문에에 의해 반환 된 값에는 아무런 문제가 없습니다. –
사실 SQL Server는 구문 분석 가능한 한 varchar와 int를 비교하는 것만으로는 충분하지 않습니다. 예를 들어 [this] (http://sqlfiddle.com/#!6/d41d8/21535) 및 [that] (http://sqlfiddle.com/#!6/d41d8)을 고려하십시오. (성공하는 동안 다른 반환 유형으로 인해 실패합니다.) – DrCopyPaste