SQL에서 테이블의 스키마 이름 변경


175

Employees데이터베이스에서 테이블의 스키마 이름을 변경하고 싶습니다 . 현재 테이블 Employees데이터베이스 스키마 이름은 dbo로 변경하고 싶습니다 exe. 내가 어떻게 해 ?

예:

에서

dbo.Employees

exe.Employees

이 쿼리로 시도했습니다.

ALTER SCHEMA exe TRANSFER dbo.Employees

그러나 이것은 나에게 오류를 준다 :

'exe'스키마가 없거나 권한이 없기 때문에 스키마를 변경할 수 없습니다.

내가 놓친 게 무엇입니까?


4
exe 스키마작성 했습니까 ?
PinnyM

1
스키마 exe가 존재합니까?
James Culshaw

아니요 나는 만들지 않았습니다. 그것을 만들려면 어떻게해야합니까?
챔피언 챔피언십


이 기사를 보았지만 약간 혼란 스럽습니다. 내 상황에서 스키마를 만드는 방법을 보여줄 수 있습니까?
챔피언 챔피언십

답변:


272

스키마 생성 :

IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'exe')) 
BEGIN
    EXEC ('CREATE SCHEMA [exe] AUTHORIZATION [dbo]')
END

ALTER Schema :

ALTER SCHEMA exe 
    TRANSFER dbo.Employees

3
sys.scemas 및 EXEC (...) 함수 란 무엇입니까?
챔피언 챔피언십

10
sys.schemas데이터베이스에 대한 모든 스키마를 포함하는 테이블입니다. Exec ( '...')은 동적 SQL 호출 만 실행합니다.이 경우 CREATE SCHEMA 명령이 쿼리 일괄 처리에서 첫 번째 명령문이어야하고 동적 SQL이이를 수행하므로 실행해야하기 때문에 필요합니다.
Eric J. Price

의 경우 모든 테이블 , 확인 한 성명에서 그것을 할, 희망은 어떤 하나하는 데 도움이됩니다.
shaijut

alter 스키마를 사용하면 속도가 매우 느려집니다. (300 행으로 작은 테이블을 전송하기 위해 3 분 후에 중지했습니다.) 대신, dbo.Employees
fivelements

29

아래 시도

declare @sql varchar(8000), @table varchar(1000), @oldschema varchar(1000), @newschema   varchar(1000)

  set @oldschema = 'dbo'
  set @newschema = 'exe'

 while exists(select * from sys.tables where schema_name(schema_id) = @oldschema)

  begin
      select @table = name from sys.tables 
      where object_id in(select min(object_id) from sys.tables where  schema_name(schema_id)  = @oldschema)

    set @sql = 'alter schema ' + @newschema + ' transfer ' + @oldschema + '.' + @table

   exec(@sql)
 end

set @sql = 'alter schema [' + @newschema + '] transfer [' + @oldschema + '].' + @table특별한 단어 / 문자가 오류를 일으키지 않도록하기 위해 사용해야 했습니다.
Stoinov

21
ALTER SCHEMA NewSchema TRANSFER [OldSchema].[TableName]

ALTER SCHEMASQL 에서 쿼리를 사용할 때 항상 대괄호를 사용해야 하거나 오류 메시지가 나타납니다.


5

SSMS를 통해 다음과 같은 방법으로 새 ​​스키마를 만들었습니다.

  • 서버의 개체 탐색기에서 보안 폴더를 클릭하면
  • 마우스 오른쪽 버튼으로 클릭 한 스키마
  • "새 스키마 ..."를 선택했습니다
  • 새 스키마 이름을 지정했습니다 (귀하의 경우 EXE)
  • 확인을 누르십시오

이 게시물에서 스키마를 변경하는 것을 발견했지만 새 스키마로 변경하려고 할 때 동일한 권한 오류가 발생했습니다. SSMS에 여러 데이터베이스가 나열되어 있으므로 데이터베이스를 지정하려고 시도했지만 작동했습니다.

USE (yourservername)  
ALTER SCHEMA exe TRANSFER dbo.Employees 

3

귀하의 코드는 다음과 같습니다

FROM
 dbo.Employees
TO
 exe.Employees

이 쿼리로 시도했습니다.

ALTER SCHEMA exe TRANSFER dbo.Employees

그냥 작성 create schema exe하고 실행하십시오.




0

SQL에서 객체의 이름을 바꾸는 데 매우주의하십시오. 수행중인 작업을 완전히 수행하지 않으면 종속성이 실패 할 수 있습니다. 환경에서 올바르게 액세스 할 수 있다면 이름을 바꾸는 데 너무 쉽게 작동한다고 말했다.

exec sp_rename 'Nameofobject', 'ReNameofobject'

1
불행히도이 시나리오에서는 작동하지 않으며 sp_rename은 객체의 [name] 값을 변경하는 경우에만 작동합니다. 스키마를 변경할 수 없습니다. 당신이 시도했다면 당신은 exec sp_rename 'dbo.Employees', 'exe.Employees'[dbo]. [exe.Employees]라는 이름을 얻게 될 것입니다
Eric J. Price

ALTER SCHEMA (스키마 이름) 전송 (schemaName). (ObjectName);
djangojazz

또한 테이블의 스키마를 변경하면 해당 테이블을 사용하는 모든 뷰가 업데이트 되지 않습니다 . 이보기에서 텍스트 (스키마 이름)를 수동으로 업데이트해야합니다. (Sigh ...)
Mike Gledhill

0

SSMS에서 올바른 데이터베이스 컨텍스트에 있는지 확인하십시오. 당신과 같은 오류가 있지만 스키마가 이미 존재한다는 것을 알고 있습니다. 내가 'MASTER'맥락에 있다는 것을 몰랐다. ALTER는 컨텍스트를 데이터베이스로 변경 한 후에 작동했습니다.


0

더 낮은 버전을 찾는 사람이있는 경우-

SQL Server 2000의 경우 :

sp_changeobjectowner @objname = 'dbo.Employess', @newowner = 'exe'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.