更新一行和所有 'parents'(如果存在)
Update a row and all 'parents' (if exists)
我需要帮助来做一个查询,我最初根据描述和所有 parents 更新一行,如果存在的话。
我的tableItemMenu:
Id
描述名称
IdParent
BolActive
所以,我需要激活(设置 BolActive = 1)一行,其中 描述 我会在查询中通知,然后如果 IdParent 不是 [=63] 则更新所有行=] 并且如果它存在于同一个 table (IdParent = Id).
类似于:
更新 ItemMenu 设置 BolActive = 1 其中 DescName = 'MyMenu'
然后我需要检查 Select * 来自 ItemMenu 的 IdParent,其中 DescName = 'MyMenu' 存在
如果是,我将 更新 ItemMenu set BolActive = 1 where IdParent (from the previous select) = Id 并再次检查此处是否存在 IdParent.. . 直到 IdParent 为 null/blank 并且它停止
可能吗?
P.s。我无法更改 table 结构。
假设我理解所需的代码结果,请尝试使用递归通用 table 表达式进行更新。提供了截图。为我的菜鸟文本格式道歉。
http://s12.postimg.org/cw8yz0isd/Capture.jpg
DECLARE @description AS VARCHAR(50) = 'Hello World'
;WITH CTE AS (
SELECT Menu.*
FROM dbo.ItemMenu Menu
WHERE Menu.descname = @description
UNION ALL
SELECT Menu2.*
FROM dbo.ItemMenu Menu2
JOIN CTE
ON Menu2.idParent = CTE.Id
)
Update ActualMenu
SET BolActive = 1
FROM CTE Menu
JOIN dbo.ItemMenu ActualMenu
ON ActualMenu.Id = Menu.Id
我需要帮助来做一个查询,我最初根据描述和所有 parents 更新一行,如果存在的话。
我的tableItemMenu:
Id
描述名称
IdParent
BolActive
所以,我需要激活(设置 BolActive = 1)一行,其中 描述 我会在查询中通知,然后如果 IdParent 不是 [=63] 则更新所有行=] 并且如果它存在于同一个 table (IdParent = Id).
类似于:
更新 ItemMenu 设置 BolActive = 1 其中 DescName = 'MyMenu'
然后我需要检查 Select * 来自 ItemMenu 的 IdParent,其中 DescName = 'MyMenu' 存在
如果是,我将 更新 ItemMenu set BolActive = 1 where IdParent (from the previous select) = Id 并再次检查此处是否存在 IdParent.. . 直到 IdParent 为 null/blank 并且它停止
可能吗?
P.s。我无法更改 table 结构。
假设我理解所需的代码结果,请尝试使用递归通用 table 表达式进行更新。提供了截图。为我的菜鸟文本格式道歉。
http://s12.postimg.org/cw8yz0isd/Capture.jpg
DECLARE @description AS VARCHAR(50) = 'Hello World'
;WITH CTE AS (
SELECT Menu.*
FROM dbo.ItemMenu Menu
WHERE Menu.descname = @description
UNION ALL
SELECT Menu2.*
FROM dbo.ItemMenu Menu2
JOIN CTE
ON Menu2.idParent = CTE.Id
)
Update ActualMenu
SET BolActive = 1
FROM CTE Menu
JOIN dbo.ItemMenu ActualMenu
ON ActualMenu.Id = Menu.Id