创建用户和分配角色的游标

Cursor which create user and assign role

我有用户列表,所有这些用户都需要在使用域身份验证的服务器上,我有临时文件 table,其中 Ian 从 cab 文件加载我的用户。 我需要根据临时文件中的记录创建用户

游标如何创建这条记录?

我正在尝试

DECLARE cursor1 CURSOR
FOR
SELECT *
FROM #temp;

OPEN cursor1

FETCH NEXT
FROM cursor1
INTO @userprofile

WHILE @@fetch_status = 0
BEGIN
    CREATE user @userprofile
    FOR LOGIN @userprofile GO

    EXEC sp_addrolemember 'role'
        ,@userprofile

    FETCH NEXT
    FROM cursor1
    INTO @userprofile
END

CLOSE cursor1

DEALLOCATE cursor1

但是它给我一个错误

Msg 102 Incorrect syntax near @userprofile and msg 137 must declare the scalar variable @userprofile

您不能在调用 CREATE USER 等命令时使用内联变量作为对象名称。你需要做这样的事情并使用动态 sql 代替:

EDIT - 在此示例中,您也可以使用 sp_adduser 而不是动态 sql。但是,从 SQL Server 2012 开始,此存储过程已被弃用。因此,如果您使用上述版本,请坚持使用动态 sql 和 CREATE USER 命令。

动态 SQL 如果 SQL2012 年或更高版本

DECLARE @UserProfile VARCHAR(20)

DECLARE cursor1 CURSOR
    FOR
        SELECT
            *
        FROM #temp;
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @UserProfile
WHILE @@Fetch_Status = 0
BEGIN
    DECLARE @Sql VARCHAR(MAX)

    SET @Sql = 'Create user ' + @UserProfile + ' for login ' + @UserProfile

    --PRINT @SQL
    EXEC (@Sql)

    EXEC sp_addrolemember   'role'
                            ,@UserProfile

    FETCH NEXT FROM cursor1 INTO @UserProfile
END
CLOSE cursor1
DEALLOCATE cursor1

sp_adduser 如果之前:

EXEC sys.sp_adduser @LogInAme = @UserProfile
                        ,@Name_In_Db = @UserProfile

我已经注释掉了 PRINT 语句。但是,如果您取消注释它。您可以从光标看到它正在创建的命令。