Sql 如何将另一个select的结果插入到添加了额外列值的新表中?
在ASP.NET UsersInRoles成员表中,我有一个Sql 如何将另一个select的结果插入到添加了额外列值的新表中?,sql,tsql,asp.net-membership,Sql,Tsql,Asp.net Membership,在ASP.NET UsersInRoles成员表中,我有一个aspnet\u用户表和UserId等,我有一个aspnet\u角色表和RoleName等,我有一个将它们连接在一起的表,名为aspnet\u UsersInRoles,带有RoleId和UserId 现在我想给所有没有RoleName“MyRoleName”的用户提供现有的RoleName“RoleNameToBeGiven” 我可以在不使用属性“MyRoleName”的情况下获得所有用户IDs,如下所示: SELECT u.User
aspnet\u用户
表和UserId
等,我有一个aspnet\u角色
表和RoleName
等,我有一个将它们连接在一起的表,名为aspnet\u UsersInRoles
,带有RoleId
和UserId
现在我想给所有没有RoleName
“MyRoleName”的用户提供现有的RoleName
“RoleNameToBeGiven”
我可以在不使用属性“MyRoleName”的情况下获得所有用户ID
s,如下所示:
SELECT u.UserId FROM dbo.aspnet_Users u
INNER JOIN dbo.aspnet_UsersInRoles r
ON u.UserId = r.UserId
WHERE r.RoleId NOT IN (SELECT RoleID FROM dbo.aspnet_Roles WHERE RoleName
= 'MyRoleName')
现在,我想将此查询中获得的每个UserId
添加到aspnet\u UsersInRoles
中,其中RoleId
属于RoleName“RoleNameToBeGiven”。要获取“RoleNameToBeGiven”的RoleId
,我有以下查询:
SELECT RoleId FROM dbo.aspnet_Roles
WHERE RoleName = 'RoleNameToBeGiven'
问题是:如何组合这两个查询,并将第一个查询中获得的每个
UserId
与第二个查询中获得的RoleId`一起插入aspnet\u UsersInRoles”表中?似乎我在以下帮助下找到了一个有效的解决方案:
DECLARE @UserId AS uniqueidentifier;
DECLARE @RoleId AS uniqueidentifier;
DECLARE @UserCursor as CURSOR;
SET @UserCursor = CURSOR FOR
SELECT u.UserId
FROM dbo.aspnet_Users u
INNER JOIN dbo.aspnet_UsersInRoles r
ON u.UserId = r.UserId
WHERE r.RoleId NOT IN
(SELECT RoleID
FROM dbo.aspnet_Roles
WHERE RoleName = 'MyRoleName')
SET @RoleId = (
SELECT RoleId
FROM dbo.aspnet_Roles
WHERE RoleName = 'RoleNameToBeGiven'
)
OPEN @UserCursor;
FETCH NEXT FROM @UserCursor INTO @UserId
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT cast(@UserId as VARCHAR (50)) + ' ' + cast(@RoleId as VARCHAR (50));
IF NOT EXISTS (SELECT UserId, RoleId FROM dbo.aspnet_UsersInRoles
WHERE UserId = @UserId AND RoleId = @RoleId)
INSERT INTO dbo.aspnet_UsersInRoles (UserId,RoleId)
VALUES(@UserId,@RoleId);
FETCH NEXT FROM @UserCursor INTO @UserId
END
CLOSE @UserCursor;
DEALLOCATE @UserCursor;