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

时间:2015-07-17 11:26:39

标签: sql sql-server-2005

我有用户列表,所有用户都会在使用域名识别的服务器上进行处理,我有临时表,其中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

1 个答案:

答案 0 :(得分:1)

通过调用CREATE USER等命令,不能将内联变量用作对象名。您需要执行类似的操作并使用动态SQL:

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

SQL2012或更高版本的动态SQL

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 if prior:

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

我已经注释掉了PRINT声明。但是,如果你取消注释它。您可以从光标中看到它创建的命令。