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 "にアンカーと再帰的部分の型が一致しません。私は "NULL AS Some Id"を "CAST(NULL AS uniqueidentifier)"に置き換えて修正できることを知っています。しかし、anchorは、parentCompanyIdがintであることを知る必要がないときに、それがuniqueidentifierであることを知る必要があるのはなぜですか?それは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

関連する問題