* 과거의 소유자가 dbooo인 테이블들을 찾아 모두 dbo로 변경하려면 다음의 쿼리를 실행해 나온 결과값을 복사해 다시 실행해주면 된다.
DECLARE @old_table_owner sysname, @new_table_owner sysname
SELECT
@old_table_owner = 'dbooo',
@new_table_owner = 'dbo'
select 'EXECUTE sp_changeobjectowner '''+QUOTENAME(a.TABLE_SCHEMA)+'.'+QUOTENAME(a.TABLE_NAME)+''','''+@new_table_owner+''''
from INFORMATION_SCHEMA.TABLES a
where a.TABLE_SCHEMA = @old_table_owner
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(a.TABLE_SCHEMA)+'.'+QUOTENAME(a.TABLE_NAME)), 'IsMSShipped') = 0
* 만약 테이블이 아닌 뷰, 프로시져 등을 변경하고 싶으면, INFORMATION_SCHEMA 뒤의 TABLE을 VIEW, ROUTINES 등으로 변경해주면 된다.
---------------------------------------------------------------------------------------------
* 아래와 같이 바로 변경하는 쿼리도 있지만, 데이터베이스 내 모든 테이블의 소유자를 한번에 변경하는 쿼리는 위험하니 정확하게 판단 후에 실행하자.
DECLARE @old_table_owne sysname, @new sysname, @sql varchar(1000)
SELECT
@old_table_owne = 'dbooo',
@new_table_owner = 'dbo',
@sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old_table_owne + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new_table_owner + ''''
EXECUTE sp_MSforeachtable @sql
댓글 없음:
댓글 쓰기