تغییر Owner جداول و SP ها در SQL Server
حتما برایتان پیش آمده که بخواهید Owner یک جدول و یا تمامی جداول پایگاه داده خود را تغییر دهید . این امر به دلایل مختلفی احساس می شود اما یکی از راه های پیش روی شما برای تغییر دادن Owner تمامی جداول موجود در پایگاه داده شما به یک Owner جدید به شکل زیر می باشد:
DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'oldOwner_CHANGE_THIS'
, @new = 'dbo'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql
و اما اگر میخواهید این کار رو بر روی تمامی Stored Procedure های موجود انجام بدهید می توانید به شکل زیر عمل کنید :
DECLARE @oldOwner sysname, @newOwner sysname
SELECT
@oldOwner = 'oldOwner_CHANGE_THIS'
, @newOwner = 'dbo'
select 'EXECUTE sp_changeobjectowner '''+QUOTENAME(a.SPECIFIC_SCHEMA)
+'.'+QUOTENAME(a.ROUTINE_NAME)+''','''+@newOwner+''''
from
INFORMATION_SCHEMA.ROUTINES a
where
a.ROUTINE_TYPE = 'PROCEDURE'
AND a.SPECIFIC_SCHEMA = @oldOwner
AND
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(a.SPECIFIC_SCHEMA)
+'.'+QUOTENAME(a.ROUTINE_NAME)), 'IsMSShipped') = 0