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'
데이터베이스에 대한 모든 연결을 중지 할 필요는 없습니다.이 작업은 즉시 수행 할 수 있습니다.
약간의 압라의 훌륭한 대답 개선 ...
이 코드가 자체 실행되도록 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.
'Development Tip' 카테고리의 다른 글
Node.js 'types'는 .ts 파일에서만 사용할 수 있습니다.-Visual Studio Code using @ ts-check (0) | 2020.10.25 |
---|---|
Android Studio 3.2.1 업그레이드 후 빌드 오류 (0) | 2020.10.25 |
NSString의 일부를 굵게 표시하는 방법은 무엇입니까? (0) | 2020.10.25 |
DataGridView CheckBox 이벤트 변경을 감지하는 방법은 무엇입니까? (0) | 2020.10.25 |
빈 셀의 테두리를 표시하는 CSS? (0) | 2020.10.25 |