sql server 2005에서 데이터 손실 없이 테이블의 "스키마"를 변경하려면 어떻게 해야 합니까?
"db_owner" 스키마에 들어간 테이블이 있는데, "dbo" 스키마에 테이블이 필요합니다.
이를 전환하기 위해 실행할 스크립트 또는 명령이 있습니까?
SQL Server Management Studio에서 다음을 수행합니다.
- 표를 마우스 오른쪽 버튼으로 클릭하고 수정을 선택합니다(지금은 "설계"라고 함).
- 속성 패널에서 올바른 소유 스키마를 선택합니다.
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'
데이터베이스에 대한 모든 연결을 중지할 필요는 없습니다. 이 작업은 즉시 수행할 수 있습니다.
sAid의 훌륭한 답변에 약간의 개선은...
이 코드가 자동으로 실행되도록 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 관리 스튜디오 또는 비주얼 스튜디오 데이터 전송을 시도하는 데 몇 시간이 걸렸습니다.새 서버의 복원된 덤프에 대해 원하는 방식으로 이 작업을(를) 실행했습니다.
SQL Management Studio를 사용하면 '수정' 옵션이 표시되지 않고 '설계' 또는 '편집'만 표시됩니다.Visual Studio(VS.NET 2003, 2005 및 2008을 확인했습니다)가 있는 경우 서버 탐색기를 사용하여 스키마를 변경할 수 있습니다.테이블을 마우스 오른쪽 버튼으로 클릭하고 '디자인 테이블'(2008) 또는 '테이블 정의 열기'(2003, 2005)를 선택합니다.전체 "열 이름" 열을 강조 표시합니다.그런 다음 마우스 오른쪽 단추를 눌러 '속성 페이지' 또는 속성(2008)을 선택할 수 있습니다.속성 시트에서 가능한 스키마에 대한 드롭다운 목록이 있는 'Owner'(2003 & 2005) 또는 'Schema'(2008)를 볼 수 있습니다.
테이블 묶음이 다른 스키마(이 경우 dbo 스키마)에 있어야 하는 상황에 사용합니다.
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 )
;
먼저 데이터베이스에 대한 모든 연결을 중지하고 명령을 실행하여 'db_owner'인 테이블의 소유권을 변경해야 합니다.
sp_MSforeachtable @command1="sp_changeobjectowner ""?"",'dbo'"
여기서 ?는 테이블 이름입니다.
언급URL : https://stackoverflow.com/questions/89606/in-sql-server-2005-how-do-i-change-the-schema-of-a-table-without-losing-any-d
'IT' 카테고리의 다른 글
특정 경로를 제공하는 http 서버를 어떻게 실행합니까? (0) | 2023.06.22 |
---|---|
Google Font API 키는 어디에서 찾을 수 있습니까? (Newbie) (0) | 2023.06.22 |
여러 Excel 열의 데이터를 모두 하나의 열로 통합하는 방법 (0) | 2023.06.22 |
filter-branch --tree-filter 뒤에 gitrepo에서 refs/original/heads/master를 제거하시겠습니까? (0) | 2023.06.22 |
Firebase 2.0 - 안드로이드 앱의 여러 가지 맛(환경)을 다루는 방법은 무엇입니까? (0) | 2023.06.22 |