Development Tip

SQL Server 2005에서 데이터 손실없이 테이블의 "스키마"를 변경하려면 어떻게해야합니까?

yourdevel 2020. 10. 25. 13:11
반응형

SQL Server 2005에서 데이터 손실없이 테이블의 "스키마"를 변경하려면 어떻게해야합니까?


"db_owner"스키마에 들어간 테이블이 있고 "dbo"스키마에 필요합니다.

전환하기 위해 실행할 스크립트 또는 명령이 있습니까?


SQL Server Management Studio에서 :

  1. 테이블을 마우스 오른쪽 버튼으로 클릭하고 수정을 선택합니다 (이제 "디자인"이라고 함).
  2. 속성 패널에서 올바른 소유 스키마를 선택합니다.

ALTER SCHEMA [NewSchema] TRANSFER [OldSchema].[Table1]

TABLE_SCHEMA이 선택으로 모두 표시 :

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 

이 쿼리를 사용하여 모든 테이블의 모든 스키마를 dbo 테이블 스키마로 변경할 수 있습니다.

DECLARE cursore CURSOR FOR 

SELECT TABLE_SCHEMA, TABLE_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     
 FETCH NEXT FROM cursore INTO @schema, @tab     
END 

CLOSE cursore     
DEALLOCATE cursore

간단한 대답

sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

데이터베이스에 대한 모든 연결을 중지 할 필요는 없습니다.이 작업은 즉시 수행 할 수 있습니다.


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

이 코드가 자체 실행되도록 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 데이터 전송을 통해 대상 스키마를 변경하는 데 몇 시간을 보냈습니다. 내가 원하는 방식으로 물건을 얻기 위해 새 서버에 덤프하십시오.


When I use SQL Management Studio I do not get the 'Modify' option, only 'Design' or 'Edit'. If you have Visual Studio (I have checked VS.NET 2003, 2005 & 2008) you can use the Server Explorer to change the schema. Right click on the table and select 'Design Table' (2008) or 'Open Table Definition' (2003, 2005). Highlight the complete "Column Name" column. You can then right click and select 'Property Pages' or Properties (2008). From the property sheet you should see the 'Owner' (2003 & 2005) or 'Schema' (2008) with a drop down list for possible schemas.


I use this for situations where a bunch of tables need to be in a different schema, in this case the dbo schema.

declare @sql varchar(8000)
;

select
  @sql = coalesce( @sql, ';', '') + 'alter schema dbo transfer [' + s.name + '].[' + t.name + '];'
from 
  sys.tables t
  inner join
  sys.schemas s on t.[schema_id] = s.[schema_id]
where 
  s.name <> 'dbo'
;

exec( @sql )
;

You need to firstly stop all connections to the database, change the ownership of the tables that are 'db_owner' by running the command

sp_MSforeachtable @command1="sp_changeobjectowner ""?"",'dbo'"

where ? is the table name.

참고URL : https://stackoverflow.com/questions/89606/in-sql-server-2005-how-do-i-change-the-schema-of-a-table-without-losing-any-d

반응형