복붙노트

[SQL] 나는 DBO에 DB 스키마를 변경하려면 어떻게

SQL

나는 DBO에 DB 스키마를 변경하려면 어떻게

나는 2008 데이터베이스에 오래된 SQL 서버 (2000)에서 테이블의 무리를 가져옵니다. 모든 가져온 테이블은 예를 들어, 사용자 이름 :로 시작 jonathan.MovieData. 테이블 속성에서 그것은 DB 스키마로 조나단이 나열되어 있습니다. 내가 저장 프로 시저를 쓸 때 지금은 조나단을 포함해야합니다. 모든 테이블 이름 앞에있는 혼란된다.

어떻게 대신 조나단의 DBO로 내 모든 테이블을 변경합니까?

현재 결과 : jonathan.MovieData

원하는 결과 : dbo.MovieData

해결법

  1. ==============================

    1.

    ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
    

    ALTER SCHEMA를 참조하십시오.

    일반화 된 구문 :

    ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
    
  2. ==============================

    2.당신은 모든 talbes에 대한 ALTER SCHEMA 문 세트를 생성합니다 다음을 실행할 수 있습니다 :

    당신은 모든 talbes에 대한 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
    

    이 사이트에서 얻었다.

    그것은 또한 당신이 필요한 경우 저장 발동을 위해 같은 일에 대해 이야기합니다.

  3. ==============================

    3.

    USE MyDB;
    GO
    ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
    GO
    

    참고 : ALTER SCHEMA

  4. ==============================

    4.MYSCHEMA에 DBO 스키마에서 테이블을 이동 :

    MYSCHEMA에 DBO 스키마에서 테이블을 이동 :

     ALTER SCHEMA MySchema TRANSFER dbo.MyTable
    

    DBO 스키마 MYSCHEMA에서 테이블을 이동 :

     ALTER SCHEMA dbo TRANSFER MySchema.MyTable
    
  5. ==============================

    5.난 그냥 비슷한 질문이 게시 : SQL Server 2005에서 어떻게 데이터의 손실없이 테이블의 "스키마"를 변경합니까?

    난 그냥 비슷한 질문이 게시 : SQL Server 2005에서 어떻게 데이터의 손실없이 테이블의 "스키마"를 변경합니까?

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

    나는 자기-실행이 코드가하는 간부를 추가, 나는 두 테이블 및 저장 프로 시저의 스키마를 변경할 수 있도록 나는 상단에 조합을 추가 :

    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 관리 스튜디오 또는 Visual Studio 데이터 전송을 얻으려고 시간을 보냈다 일을 내가 원하는 방식을 얻기 위해 새로운 서버에 덤프.

  6. ==============================

    6.당신은이 게시물에 여러 데이터베이스 오브젝트의 배치 변화 스키마 설명 수 :

    당신은이 게시물에 여러 데이터베이스 오브젝트의 배치 변화 스키마 설명 수 :

    MSSQL에있는 모든 테이블, 뷰의 스키마 및 저장 프로 시저를 변경하는 방법

  7. ==============================

    7.방법은 개인 일을 위해 그것을 할 수 있습니다 :

    방법은 개인 일을 위해 그것을 할 수 있습니다 :

    ALTER 스키마 DBO 전송 jonathan.MovieData

  8. ==============================

    8.나는 비슷한 문제가 있었다하지만 내 스키마는 백 슬래시를했다. 이 경우, 스키마 주위에 괄호를 포함한다.

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

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

    9.쿼리 아래의 과거 SA 계정과 새 쿼리를 클릭로 열기 SQL 서버

    쿼리 아래의 과거 SA 계정과 새 쿼리를 클릭로 열기 SQL 서버

    다음 실행을 클릭, 그것은 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]
    
  10. ==============================

    10.MS-HELP : //MS.SYaLTsTs.vya/MS.SYaLSVR.vya.en/tsyalrefya/html/0a760138-460e-410a-a31-d60af03bf2ed.htm

    MS-HELP : //MS.SYaLTsTs.vya/MS.SYaLSVR.vya.en/tsyalrefya/html/0a760138-460e-410a-a31-d60af03bf2ed.htm

    ALTER SCHEMA schema_name을 TRANSFER의 securable_name

  11. from https://stackoverflow.com/questions/1146599/how-do-i-change-db-schema-to-dbo by cc-by-sa and MIT license