Я унаследовал базу данных SQL 2008, в которой все ее объекты имеют префикс имени разработчика как владельца, то есть имя_пользователя.sp_get_all_users.SQL Server 2016 Изменение владельца объекта
Я восстановил dbase на SQL Server 2016 Express Edition.
Есть несколько сотен объектов dbase, есть ли способ автоматизировать изменение владельцев объектов на dbo, а не вручную редактировать каждый объект?
Я пробовал следующее, но, видимо, вы больше не можете делать специальные изменения для объектов с SQL Server 2005?
SELECT * from sysobjects where uid = user_id('UseNAme')
declare @Return int
exec @Return = sp_configure 'allow updates', '1'
SELECT @Return as 'Returned Code'
GO
reconfigure WITH OVERRIDE
GO
DECLARE @Rows int, @Error int
BEGIN TRANSACTION
update sysobjects set uid = user_id('dbo') where uid = user_id('UseNAme')
SELECT @Error = @@Error, @Rows = @@RowCount
SELECT @Rows as '#Rows'
IF @Rows > 0
BEGIN
SELECT @Rows AS '#Rows'
COMMIT TRANSACTION
END
else
BEGIN
SELECT @Error AS 'Error #'
ROLLBACK TRANSACTION
END
exec sp_configure 'allow updates', '0'
reconfigure WITH OVERRIDE
go
Любая помощь в оценке.
Я также избегаю 'sp_msforeachtable' - он не поддерживается и даже не документирован. Ваш код также будет пытаться переместить каждую отдельную таблицу в системе, независимо от того, в какой схеме она находится. –
Спасибо @AaronBertrand – TheGameiswar
@TheGameiswar Я обновил свой ответ, чтобы отразить то, что вы указали. SP все еще работает для меня в 2012 году, но ваш подход является правильным. надеюсь, мой ответ по-прежнему будет иметь ценность сейчас. –