T-SQL语句不会在grant语句中接受变量作为角色名称

use*_*087 3 sql variables roles grant sql-server-2008

我想在SQL Server 2008中创建一个存储过程来创建数据库角色并为它们授予权限,这需要一个参数,一个nvarchar代表要创建的角色名称,但我不知道如何编写它.

我可以用这个创建角色

EXEC sp_addrole @RoleName
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用此权限授予角色权限时

Grant select on dbo.someTable to  @RoleName
Run Code Online (Sandbox Code Playgroud)

它不接受@RoleName,我该怎么做呢?

谢谢

Ric*_*iwi 6

使用动态SQL生成sql语句作为文本,然后可以使用EXEC运行

declare @sql nvarchar(max)
set @sql = 'Grant select on dbo.someTable to ' + @RoleName  -- protect if required
EXEC (sql)
Run Code Online (Sandbox Code Playgroud)