Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将另一个select的结果插入到添加了额外列值的新表中?_Sql_Tsql_Asp.net Membership - Fatal编程技术网

Sql 如何将另一个select的结果插入到添加了额外列值的新表中?

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

在ASP.NET UsersInRoles成员表中,我有一个
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;