db 스키마를 dbo로 변경하는 방법


115

이전 SQL 서버 (2000)에서 2008 데이터베이스로 여러 테이블을 가져 왔습니다. 가져온 모든 테이블에는 내 사용자 이름이 접두사로 붙습니다 (예 : jonathan.MovieData. 테이블 properties에는 jonathandb 스키마로 나열 됩니다. 저장 프로 시저를 작성할 때 jonathan.혼란스러운 모든 테이블 이름 앞에 포함해야합니다 .

모든 테이블을 조나단 대신 dbo로 변경하려면 어떻게해야합니까?

현재 결과 : jonathan.MovieData

원하는 결과 : dbo.MovieData

답변:


179
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

ALTER SCHEMA를 참조하십시오 .

일반화 된 구문 :

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 

12
Google 직원을위한 시간 절약 : ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
Co7e

1
사용자에게 백 슬래시가있는 경우 다음을 실행하십시오. ALTER SCHEMA dbo TRANSFER "DOMAIN \ user".tableName
PatricF

@PatricF 인용 식별자 규칙은 다른 이름과 마찬가지로 스키마 이름에 적용됩니다 [DOMAIN\user].[tableName]. 일반적으로 SQL Server 커뮤니티에서는 Transact-SQL 인용 식별자가 사용됩니다 ( []) ". 특정 요구 사항이없는 한 피 하십시오.
Remus Rusanu 2016 년

그가 내 모든 테이블을 요청 했을 때 이것이것을 확인 하여 하나의 문장으로 수행하면 희망이 도움이됩니다.
shaijut

2
@leigero 사용 []다른 경우처럼, 당신은 SQL 오브젝트 이름에 대한 정확하고 싶을 때. [domain\user123].TableName.
레무스 Rusanu

40

다음을 실행하면 모든 탈브에 대한 ALTER sCHEMA 문 집합이 생성됩니다.

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'

그런 다음 쿼리 분석기에서 문을 복사하고 실행해야합니다.

여기에 당신을 위해 그렇게 할 오래된 스크립트가 있습니다. 저는 객체 소유자를 변경함으로써 생각합니다. 하지만 2008 년에는 시도하지 않았습니다.

DECLARE @old sysname, @new sysname, @sql varchar(1000)

SELECT
  @old = 'jonathan'
  , @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

이 사이트 에서 가져 왔습니다. .

필요한 경우 저장된 procs에 대해 동일한 작업을 수행하는 것에 대해서도 설명합니다.


두 번째 비트는 소용이 없었지만 링크 덕분에 조사해 보겠습니다.
jonathan hall

위의 INFORMATION_SCHEMA 선택을 사용하여 모든 ALTER SCHEMA 문을 자동으로 생성 할 수 없습니까?
patmortech

INFORMATION_SCHEMA.TABLES 설명서 에서 다음 인용문을 참고하십시오 . " 중요 개체의 스키마를 확인하는 데 INFORMATION_SCHEMA 뷰를 사용하지 마십시오. 개체의 스키마를 찾는 유일한 방법은 sys.objects 카탈로그 뷰를 쿼리하는 것입니다." 따라서 sys.tables대신 사용하도록 예제를 다시 작성해야합니다 (sys.objects의 하위 집합).
Heinzi


15

dbo 스키마에서 MySchema로 테이블을 이동합니다.

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


MySchema에서 dbo 스키마로 테이블 이동 :

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable

9

방금 비슷한 질문에이 글을 올렸습니다 . SQL Server 2005에서 데이터 손실없이 테이블의 "스키마"를 어떻게 변경합니까?


약간 압라의 훌륭한 대답 개선 ...

이 코드가 자체 실행되도록 exec를 추가하고 맨 위에 유니온을 추가하여 두 테이블 및 저장 프로 시저의 스키마를 변경할 수 있습니다.

DECLARE cursore CURSOR FOR 


select specific_schema as 'schema', specific_name AS 'name'
FROM INFORMATION_SCHEMA.routines
WHERE specific_schema <> 'dbo' 

UNION ALL

SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name'
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA <> 'dbo' 



DECLARE @schema sysname, 
 @tab sysname, 
 @sql varchar(500) 


OPEN cursore     
FETCH NEXT FROM cursore INTO @schema, @tab 

WHILE @@FETCH_STATUS = 0     
BEGIN 
 SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']'    
 PRINT @sql   
 exec (@sql)  
 FETCH NEXT FROM cursore INTO @schema, @tab     
END 

CLOSE cursore     
DEALLOCATE cursore

나도 dbdump를 복원해야했고 스키마가 dbo가 아님을 발견했습니다. Sql Server Management Studio 또는 Visual Studio 데이터 전송을 가져와 대상 스키마를 변경하는 데 몇 시간을 보냈습니다. 내가 원하는 방식으로 물건을 얻기 위해 새 서버에 덤프하십시오.


치료 효과가 있습니다. 감사.
bgx



2

비슷한 문제가 있었지만 내 스키마에는 백 슬래시가 있습니다. 이 경우 스키마 주위에 대괄호를 포함하십시오.

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;

2

SQL Server를 SA 계정으로 열고 아래 쿼리를 지나서 새 쿼리를 클릭하십시오.

그런 다음 실행을 클릭하면 소유 한 모든 스키마를 SA 계정으로 롤백합니다.

alter authorization on schema::[db_datareader] to [dbo]
alter authorization on schema::[db_datareader] to [db_datareader]
alter authorization on schema::[db_datawriter] to [dbo]
alter authorization on schema::[db_datawriter] to [db_datawriter]
alter authorization on schema::[db_securityadmin] to [dbo]
alter authorization on schema::[db_securityadmin] to [db_securityadmin]
alter authorization on schema::[db_accessadmin] to [dbo]
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
alter authorization on schema::[db_backupoperator] to [dbo]
alter authorization on schema::[db_backupoperator] to [db_backupoperator]
alter authorization on schema::[db_ddladmin] to [dbo]
alter authorization on schema::[db_ddladmin] to [db_ddladmin]
alter authorization on schema::[db_owner] to [dbo]
alter authorization on schema::[db_owner] to [db_owner]

1

ms-help : //MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm

ALTER SCHEMA schema_name TRANSFER securable_name

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.