我有一個產品列表,使用HierarchyId進行排序,但對於某些項目,層次結構的完整路徑產生了錯誤的結果。只有幾...生病下面表明:SQL HierarchyId有時會產生錯誤的路徑
SELECT
ProductId
,Name
,FullName
,Hierarchy
,Hierarchy.ToString() as hierarchyString
,editor.ufn_Product_GetFullName(ProductId) as ufnGetFullName
,Hierarchy.GetLevel() as [level]
FROM Editor.Product
WHERE ProductId = 378
OR Hierarchy.ToString() like '/16/1/1/%'
OR Hierarchy.ToString() = '/16/1/'
OR Hierarchy.ToString() = '/16/'
OR Hierarchy.ToString() = '/'
ORDER BY Hierarchy.ToString()
使用該查詢我得到的結果是:
'外部>渲染>顏色>白色'
然而其中四個產生最後兩個交換PED像
「外觀>渲染>白色>顏色」
我不能爲我的生活,找出原因的條款進行交換,爲什麼只有一些。層次結構看起來正確,並且子級項目上的級別都是正確的。我需要你的幫助......
以下是用於從產品層次結構生成路徑的功能,但我不明白它是如何成爲問題的。
ALTER FUNCTION [Editor].[ufn_Product_GetFullName] (@ID INT)
RETURNS VARCHAR(8000)
AS BEGIN
-- Create and insert names into temp table
DECLARE @NamesTable TABLE (Name varchar(8000));
INSERT @NamesTable (Name)
SELECT t1.Name
FROM ( SELECT ProductId, Hierarchy, Name
FROM Product WITH(NOLOCK)
WHERE (ProductId = @ID)) AS t2
CROSS JOIN Product AS t1
WHERE (t1.Hierarchy = t2.Hierarchy)
OR (t1.Hierarchy <> '/')
AND (t2.Hierarchy.IsDescendantOf(t1.Hierarchy) = 1)
ORDER BY t1.Hierarchy;
-- Define name string
DECLARE @Name VARCHAR(8000);
-- Coalesce names from temp table into one long string
SELECT @Name = COALESCE(@Name + ' > ', '') + Name
FROM @NamesTable
-- Return full string
RETURN @Name
END
這真的是MySQL代碼嗎? – jarlh