我的表格中有以下几列:
FolderPath
,UserGroup
,Permission
,AccessControllType
,FolderId
,IsInherited
如果IsInherited
在表中包含另一个FolderPath
并且FolderPath
是相同的并且UserGroup
是一样。
我如何尽快做到这一点?
谢谢。
编辑: 我现在有以下SQL语句。它基于一个答案:
Permission
但是当我检查结果时,它们不是我所期望的。当用户对较低级别的文件夹具有其他权限时,该字段也设置为UPDATE t1
SET t1.IsInherited = 'True'
FROM dbo.Folder t1
INNER JOIN dbo.Folder t2 on t1.UserGroup = t2.UserGroup
AND t1.Permission = t2.Permission
AND t1.FolderPath LIKE t2.FolderPath+'%'
WHERE t1.FolderId <> t2.FolderId
。那是问题所在。
答案 0 :(得分:1)
您可以使用:
UPDATE t1
SET t1.IsInherited = 'Yes' -- Or use a bit field with value : 1
FROM Table t1
INNER JOIN Table t2 on t1.UserGroup = t2.UserGroup
AND t1.Permission = t2.Permission
AND t1.FolderPath LIKE t2.FolderPath+'%'
AND t1.FolderId <> t2.FolderId
当Usergroup
和Permission
相等且FolderPath
以相同的部分开头时,这将联接同一张表。
由于它是inner join
,因此只会更新符合此条件的行。
如果您不想切换所有行的状态,则可以使用:
UPDATE t1
SET t1.IsInherited = IIF(t2.FolderId IS NULL, 'No', 'Yes')
FROM Table t1
LEFT JOIN Table t2 on t1.UserGroup = t2.UserGroup
AND t1.Permission = t2.Permission
AND t1.FolderPath LIKE t2.FolderPath+'%'
AND t1.FolderId <> t2.FolderId