我正在从备份文件创建一个数据库(我将其称为 db 1),并且我需要将一个数据库(以及此 db 2)的用户复制到新恢复的数据库。
我知道必须完成的第一步是删除新恢复的数据库中的所有现有用户。
将用户从 db 2 复制到 db 1 的正确方法是什么?
最佳答案
您不能只使用 INSERT .... SELECT 构造。
您需要使用 sys.users 信息来生成 CREATE USER 语句并执行这些语句。
如果这是一次性的事情,我会使用
select 'CREATE USER [' + uu.name + '] FOR LOGIN ' + ll.name + ' ;'
from sys.sysusers uu
join master.sys.syslogins ll on ll.sid = uu.sid
然后捕获输出,将输出粘贴到批处理中并运行该批处理 - 一次性快速且轻松。
如果您需要以自动方式执行此操作,可以使用光标:
USE DB2 -- the source of the users
DECLARE cursCol CURSOR FAST_FORWARD FOR
select 'CREATE USER [' + uu.name + '] FOR LOGIN ' + ll.name + ' ;'
from sys.sysusers uu
join master.sys.syslogins ll on ll.sid = uu.sid
DECLARE @cmdString varchar(max) --for storing the first half of INSERT statement
OPEN cursCol
USE DB1 -- the target of the created users
FETCH NEXT FROM cursCol INTO @cmdString;
WHILE @@FETCH_STATUS=0 BEGIN
PRINT @cmdString;
EXEC (@cmdString);
FETCH NEXT FROM cursCol INTO @cmdString;
END
CLOSE cursCol
DEALLOCATE cursCol
如果不是同一台服务器,您将需要生成更多脚本,但仍然可以完成。
关于sql - 如何将所有数据库用户从一个数据库复制到另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895101/