[英]CREATE USER in Dynamic SQL for each database
I want to be able to create a user for a login and assign some permission, and I want to do this for databases whose name is > 4 Here's what I have 我希望能够为登录创建用户并分配一些权限,并且我想对名称> 4的数据库执行此操作
EXEC sp_MSForEachDB 'Declare @name varchar(100), @UserToAdd VARCHAR(100) = ''HQ\\tname'' select @name = ''?'' PRINT @name IF db_id(@name) > 4 BEGIN USE ? EXEC (''CREATE USER ['' + @UserToAdd + ''] FOR LOGIN ['' + @UserToAdd + ''];'') EXEC (''EXEC sp_addrolemember N''db_datareader'', N'''' + @UserToAdd + '''';'') END'
I'm having some trouble with the syntax using multiple quotes, If I just run this for an individual database I know it works using the following code 我在使用多引号的语法上遇到了一些麻烦,如果仅对单个数据库运行它,我知道它可以使用以下代码运行
DECLARE @UserToAdd VARCHAR(100) = 'HQ\\tname' BEGIN USE [dbnamehere] EXEC ('CREATE USER [' + @UserToAdd + '] FOR LOGIN [' + @UserToAdd + '];') EXEC ('EXEC sp_addrolemember N''db_datareader'', N''' + @UserToAdd + ''';') END
Could anyone help out with the syntax? 有人可以帮忙语法吗?
One way to do this is with a cursor: 一种方法是使用游标:
declare
@sql nvarchar(max),
@db sysname,
@UserToAdd sysname = 'HQ\tname';
declare db_cursor cursor local fast_forward for
select
name
from
sys.databases
where
database_id > 4;
open db_cursor;
fetch next from db_cursor into @db;
while @@fetch_status = 0
begin
set @sql = 'use ' + quotename(@db) + ';
create user ' + quotename(@UserToAdd) + ' for login ' + quotename(@UserToAdd) + ';
exec sp_addrolemember ''db_datareader'', ' + quotename(@UserToAdd, '''') + ';';
exec sp_executesql @sql;
fetch next from db_cursor into @db;
end;
close db_cursor;
deallocate db_cursor;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.