[sql] db 스키마를 dbo로 변경하는 방법
이전 SQL 서버 (2000)에서 2008 데이터베이스로 여러 테이블을 가져 왔습니다. 가져온 모든 테이블에는 내 사용자 이름이 접두사로 붙습니다 (예 : jonathan.MovieData
. 테이블 properties
에는 jonathan
db 스키마로 나열 됩니다. 저장 프로 시저를 작성할 때 jonathan.
혼란스러운 모든 테이블 이름 앞에 포함해야합니다 .
모든 테이블을 조나단 대신 dbo로 변경하려면 어떻게해야합니까?
현재 결과 : jonathan.MovieData
원하는 결과 : dbo.MovieData
답변
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
ALTER SCHEMA를 참조하십시오 .
일반화 된 구문 :
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
답변
다음을 실행하면 모든 탈브에 대한 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에 대해 동일한 작업을 수행하는 것에 대해서도 설명합니다.
답변
답변
dbo 스키마에서 MySchema로 테이블을 이동합니다.
ALTER SCHEMA MySchema TRANSFER dbo.MyTable
MySchema에서 dbo 스키마로 테이블 이동 :
ALTER SCHEMA dbo TRANSFER MySchema.MyTable
답변
방금 비슷한 질문에이 글을 올렸습니다 . 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 데이터 전송을 가져와 대상 스키마를 변경하는 데 몇 시간을 보냈습니다. 내가 원하는 방식으로 물건을 얻기 위해 새 서버에 덤프하십시오.
답변
이 게시물에 설명 된대로 여러 데이터베이스 개체의 스키마를 일괄 적으로 변경할 수 있습니다.
답변
개별 작업을 수행하는 방법 :
스키마 변경 dbo 전송 jonathan.MovieData