2011-12-19 4 views
1
;WITH Companies(pkCompanyID,name,parentCompanyID,SomeId) AS 

     (
      SELECT 
       tblCompany.pkCompanyID, 
       tblCompany.name, 
       NULL,--this is a int with no value and it works in the anchor 
       NULL AS SomeId--But this uniqueidentifier do not work why? 
      FROM 
       tblCompany 
      WHERE 
       tblCompany.fkCompToCompID IS NULL 
      UNION ALL 
      SELECT 
       tblCompany.pkCompanyID, 
       tblCompany.name, 
       tblCompany.fkCompToCompID, 
       NEWID() 
      FROM 
       tblCompany 
       JOIN Companies ON tblCompany.fkCompToCompID=Companies.pkCompanyID 
     ) 
     SELECT 
      * 
     FROM 
      Companies 

이 함수는 "재귀 쿼리"Companies "의"SomeId "열에서 앵커와 재귀 부분 간의 유형이 일치하지 않습니다. 나는 "CAST (NULL AS uniqueidentifier)"로 "NULL AS SomeId"를 대체하여 문제를 해결할 수 있음을 알고 있습니다. 그러나 앵커는 parentCompanyId가 int인지 알 필요가없는 경우 왜 고유 식별자인지를 알아야합니까? uniqueidentifier가 객체이고 int가 값 유형이기 때문입니까?uniqueidentifier가있는 순환 CTE는 앵커에 값을 가져야합니다.

답변

3

NULL은 기본적으로 int으로 간주되므로 명시 적으로 캐스팅하지 않아도됩니다.

당신은 당신의 답변을

SELECT NULL AS FOO INTO BAR; 

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME='FOO'AND TABLE_NAME='BAR'; 
+0

감사에서이 문제를 볼 수 있습니다. 나를 이해하는 데 큰 도움이된다. – Arion

관련 문제