;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
因此该函数将给出错误:“ anchor 与递归查询“Companies”的列“SomeId”中的递归部分之间的类型不匹配”。我知道我可以通过将“NULL AS SomeId”替换为“CAST(NULL AS uniqueidentifier)”来修复它。但是为什么当parentCompanyId不需要知道它是一个int时,anchor需要知道它是一个uniqueidentifier呢?是因为uniqueidentifier是对象而int是值类型吗?
最佳答案
NULL
默认情况下被假定为 int
,这就是为什么您不必显式转换该类型。
您可以从
看到这一点SELECT NULL AS FOO INTO BAR;
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='FOO'AND TABLE_NAME='BAR';
关于sql - 具有 uniqueidentifier 的递归 CTE 必须在 anchor 中具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8562670/