Префикс таблицы базы данных MS SQL от предыдущего владельца - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть база данных MS SQL 2000, для которой было выполнено резервное копирование с общедоступного сервера и восстановлено в месте тестирования для обновления теста. Проблема в том, что пользователь, который имел разрешение на доступ к общему серверу, не существует на тестовом сервере, и теперь все таблицы имеют префикс с этим именем пользователя (что требует изменения ВСЕХ запросов к этим таблицам!)

Есть ли быстрый способ исправить это? Я изменил владельца базы данных, но это не помогло.

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

Хорошо, нашел ответ - владелец OBJECT должен быть изменен на DBO, что исключает необходимость префиксировать ссылки на ваш объект в ваших скриптах / запросах SQL - объект в этом случае - таблица (ы) базы данных

Вот скрипт, который изменит владельца для объектов в базе данных (не мой собственный код)

DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)

SET @currentOwner = 'old_owner'
SET @newOwner = 'dbo'

DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects 
WHERE xtype = 'U' or xtype = 'P'
AND LEFT([name], 2) <> 'dt'
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar)
   EXEC sp_changeobjectowner @qualifiedObject, @newOwner
   FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor
1 голос
/ 23 февраля 2010

Создайте логин и пользователей, но узнайте SID от sysusers

EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'

Примечание. SQL Server 2000 не может использовать CREATE LOGIN или CREATE USER

...