3

我想创建一个 SQL Server 2012 查询,它将权限名称的常量列表(例如“ViewUsersPermission”、“ModifyUsersPermission”)插入到表 RolePermissions 中。

该表有两列:“RoleID”是 Roles 表的外键,以及 varchar 列“PermissionTypeName”。

INSERT INTO [dbo].[RolePermissions] ([PermissionTypeName], [RoleID])

   SELECT 'ViewUsersPermission' AS [PermissionTypeName]
   UNION ALL
   SELECT 'ModifyUsersPermission' AS [PermissionTypeName]
   UNION ALL
   SELECT 'ViewRolesPermission' AS [PermissionTypeName]

   INNER JOIN   (SELECT [RoleID] FROM [dbo].[Roles]
                WHERE [Name] = 'Administrator')

我正在寻找更好的解决方案。我想指定权限类型列表,例如:

SELECT FROM 'ViewUsersPermission', 'ModifyUsersPermission', 'ViewRolesPermission' 

而不是使用UNION ALL构造。

4

2 回答 2

8

假设您至少在 2008 年

SELECT RoleName
FROM   (VALUES('ViewUsersPermission'),
              ('ModifyUsersPermission'),
              ('ViewRolesPermission')) V(RoleName) 
于 2012-11-21T13:26:30.560 回答
0

根据 Martin 的帮助,完整的 SQL INSERT 语句如下所示:

INSERT INTO [dbo].[RolePermissions] ([PermissionTypeName], [RoleID])
    SELECT [PermissionTypeName], [RoleID] FROM (VALUES('ViewUsersPermission'),             
        ('ModifyUsersPermission'), ('ViewRolesPermission')) V([PermissionTypeName])
    INNER JOIN [dbo].[Roles] AS [Role]
        ON [Role].[Name] = 'Administrator'
于 2012-11-21T13:37:01.127 回答