sql - 如何将所有数据库用户从一个数据库复制到另一个数据库

标签 sql sql-server database

我正在从备份文件创建一个数据库(我将其称为 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/

相关文章:

sql-server - 将服务器 SQL Server 2014 链接到 SQL Server 版本 8

SQL Server 2008 : How to find trailing spaces

sql - PL/SQL - 防止 ORA-06502

sql-server - 使用新数据库名称更新 SQL Server 2005 View ?

mysql - 需要在 MYSQL V5.1.11 中将 sql 转储存储在其他架构中

c++ - 编写 DBMS 的技巧

mysql - 从部分重新创建完整表

mysql - 在同一个表中的列设置的条件下,使用同一个表中的两个值进行 SQL 查询

c# - 使用列名检索数据的 MySQL 查询

sql - 在 Oracle 中显示与时间戳关联的时区