복붙노트

[SQL] 고유 식별자에 VARCHAR에서 SQL 변환이보기에 실패

SQL

고유 식별자에 VARCHAR에서 SQL 변환이보기에 실패

나는 다음과 같은 시나리오에 갇혔어요. 나는 고객 데이터가있는 테이블과 나는 우리의 B2B 사이트에서 무슨 일이 일어나고 있는지 모니터링 기록을 넣어 테이블이있는 데이터베이스가 있습니다.

고객 테이블은 다음과 같다 :

모니터링 테이블 :

매개 변수 1에 저장된 고객의 GUID뿐만 아니라 다른 데이터 유형입니다.

이제 문제는 가장 최근 방문한 고객이 그리드의 상단에 와야 마지막 방문 날짜를 따라 우리의 고객을 주문했다.

나는 내 모니터링 테이블 위에 뷰를하기로 결정 그래서 엔티티 프레임 워크와 내가 문자열과 GUID 유형을 비교하는 문제가 있었다 사용하고 있습니다 :

SELECT        
   ID, 
   CONVERT(uniqueidentifier, parameter2) AS customerguid, 
   USERguid, 
   CreationDate
FROM            
   MONITORING
WHERE        
   (dbo.isuniqueidentifier(parameter2) = 1) 
   AND 
   (parameter1 LIKE 'Customers_%' OR parameter1 LIKE 'Customer_%')

나는 EF에서보기를 가져오고 내 LINQ 쿼리를했다. 내가 생성 된 SQL 쿼리를 추출 그래서는 아무 것도 반환하지 않습니다. SQL 관리에서 쿼리를 테스트 할 때 스튜디오 나는 다음과 같은 오류가 발생했습니다 : 고유 식별자로 문자열에서 변환 할 때 변환에 실패했습니다.

다음 코드에서 문제 거짓말은 (이 질문에 대한 단순화뿐만 아니라 오류를 제공합니다 :

SELECT *,
    (
        SELECT 
            [v_LastViewDateCustomer].[customerguid] AS [customerguid]
        FROM [dbo].[v_LastViewDateCustomer] AS [v_LastViewDateCustomer]
        WHERE c.GUID = [v_LastViewDateCustomer].[customerguid]
    )

FROM CM_CUSTOMER c

내가 가입 할 때, 나는 내 결과를 얻을 수 :

SELECT *
FROM CM_CUSTOMER c
    LEFT JOIN
    [v_LastViewDateCustomer] v
on c.GUID = v.customerguid

나는 SQL 바이올린을 만들려고하지만, 그 사이트에 노력하고있다. http://sqlfiddle.com/#!3/66d68/3

올바른 방향으로 날 지점 수 누구?

해결법

  1. ==============================

    1.사용하다

    사용하다

    TRY_CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid
    

    대신에

     CONVERT(UNIQUEIDENTIFIER, parameter2) AS customerguid
    

    뷰는 쿼리에 인라인 및 CONVERT는 WHERE 전에 실행할 수 있습니다.

    몇 가지 추가 설명은 SQL 서버가 비논리적 인 오류를 발생하지 않아야 참조

  2. from https://stackoverflow.com/questions/20474041/sql-conversion-from-varchar-to-uniqueidentifier-fails-in-view by cc-by-sa and MIT license