Вы не можете просто использовать конструкцию 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
Если это не тот же самый сервер, вы бы больше скрипт для генерации, но он все еще может сделайте.
Возможно, вам повезло больше на http://dba.stackexchange.com/ - тем временем: это две базы данных на одном сервере SQL? (это упрощает) .... (подсказка: SELECT .... FROM sys.sysusers) – Stan
Да, они находятся на одном сервере. Я собирался сделать выбор вставки из sys.sysusers, но я не был уверен, будут ли какие-либо нежелательные побочные эффекты от этого. Есть ли какие-либо предвидимые побочные эффекты от этого? Также мне нужно обновить sys.database_principals? – user1058367