[SQL] 이름 바꾸기 SQL 서버 스키마
SQL이름 바꾸기 SQL 서버 스키마
어떻게 SQL Server를 사용하여 스키마의 이름을 바꿀 수 있습니까?
해결법
-
==============================
1.당신이 스키마에 많은 수의 개체가있는 경우, 당신은 (그것은 단지 당신이 그것을 실행하기 전에 그래서, 당신의 SP에, UDF의 등을 확장해야 할 수도 있습니다, 테이블과 뷰를 않습니다 자동으로 모든 변경 사항을 생성하기 위해이 같은 것을 사용할 수 있습니다 .)
당신이 스키마에 많은 수의 개체가있는 경우, 당신은 (그것은 단지 당신이 그것을 실행하기 전에 그래서, 당신의 SP에, UDF의 등을 확장해야 할 수도 있습니다, 테이블과 뷰를 않습니다 자동으로 모든 변경 사항을 생성하기 위해이 같은 것을 사용할 수 있습니다 .)
USE SandBox DECLARE @OldSchema AS varchar(255) DECLARE @NewSchema AS varchar(255) DECLARE @newLine AS varchar(2) = CHAR(13) + CHAR(10) SET @OldSchema = 'dbo' SET @NewSchema = 'StackOverflow' DECLARE @sql AS varchar(MAX) SET @sql = 'CREATE SCHEMA [' + @NewSchema + ']' + @newLine SELECT @sql = @sql + 'GO' + @newLine SELECT @sql = @sql + 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' + @newLine FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @OldSchema SET @sql = @sql + 'DROP SCHEMA [' + @OldSchema + ']' PRINT @sql -- NOTE PRINT HAS AN 8000 byte limit - 8000 varchar/4000 nvarchar - see comments IF (0=1) EXEC (@sql)
-
==============================
2.당신은 하나의 스키마를 통해 다른 개별 개체를 이동 :
당신은 하나의 스키마를 통해 다른 개별 개체를 이동 :
ALTER SCHEMA NewSchema TRANSFER OldSchema.Object;
-
==============================
3.I 개별적으로 명령을 실행하는 문자열 변수의 크기에 의해 한정되지 않으며하기 모두 상기 코드 및 사용 된 커서를 결합했다. 나는 이미 새로운 스키마를 생성 한 모든 괜찮 인증 후 이전을 삭제합니다 가정합니다. 그것은 안전합니다 ... :)
I 개별적으로 명령을 실행하는 문자열 변수의 크기에 의해 한정되지 않으며하기 모두 상기 코드 및 사용 된 커서를 결합했다. 나는 이미 새로운 스키마를 생성 한 모든 괜찮 인증 후 이전을 삭제합니다 가정합니다. 그것은 안전합니다 ... :)
DECLARE @OldSchema AS varchar(255) DECLARE @NewSchema AS varchar(255) SET @OldSchema = 'dbo' SET @NewSchema = 'StackOverflow' DECLARE @sql AS varchar(MAX) DECLARE @Schema AS varchar(MAX) DECLARE @Obj AS varchar(MAX) -- First transfer Tables and Views DECLARE CU_OBJS CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @OldSchema OPEN CU_OBJS FETCH NEXT FROM CU_OBJS INTO @Schema, @Obj WHILE @@FETCH_STATUS = 0 BEGIN SELECT @sql = 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + @OldSchema + '].[' + @Obj + ']' PRINT @sql -- EXEC (@sql) FETCH NEXT FROM CU_OBJS INTO @Schema, @Obj END CLOSE CU_OBJS DEALLOCATE CU_OBJS -- Now transfer Stored Procedures DECLARE CU_OBJS CURSOR FOR SELECT sys.schemas.name, sys.procedures.name FROM sys.procedures,sys.schemas WHERE sys.procedures.schema_id=sys.schemas.schema_id and sys.schemas.name = @OldSchema OPEN CU_OBJS FETCH NEXT FROM CU_OBJS INTO @Schema, @Obj WHILE @@FETCH_STATUS = 0 BEGIN SELECT @sql = 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + @Schema + '].[' + @Obj + ']' PRINT @sql -- EXEC (@sql) FETCH NEXT FROM CU_OBJS INTO @Schema, @Obj END CLOSE CU_OBJS DEALLOCATE CU_OBJS
-
==============================
4.저장 프로 시저가 SQL Server 2008의 더 테이블이 스키마 이름을 바꾸려면
저장 프로 시저가 SQL Server 2008의 더 테이블이 스키마 이름을 바꾸려면
IF OBJECT_ID ( 'dbo.RenameSchema', 'P' ) IS NOT NULL DROP PROCEDURE dbo.RenameSchema; GO CREATE PROCEDURE dbo.RenameSchema @OLDNAME varchar(500), @NEWNAME varchar(500) AS /*check for oldschema exist or not */ IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = @OLDNAME) BEGIN RETURN END /* Create the schema with new name */ IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = @NEWNAME) BEGIN EXECUTE( 'CREATE SCHEMA ' + @NEWNAME ); END /* get the object under the old schema and transfer those objects to new schema */ DECLARE Schema_Cursor CURSOR FOR SELECT ' ALTER SCHEMA ' + @NEWNAME + ' TRANSFER '+ SCHEMA_NAME(SCHEMA_ID)+'.'+ name as ALTSQL from sys.objects WHERE type IN ('U','V','P','Fn') AND SCHEMA_NAME(SCHEMA_ID) = @OLDNAME; OPEN Schema_Cursor; DECLARE @SQL varchar(500) FETCH NEXT FROM Schema_Cursor INTO @SQL; WHILE @@FETCH_STATUS = 0 BEGIN exec (@SQL) FETCH NEXT FROM Schema_Cursor INTO @SQL; END; CLOSE Schema_Cursor; DEALLOCATE Schema_Cursor; /* drop the old schema which should be the user schema */ IF @OLDNAME <> 'dbo' and @OLDNAME <> 'guest' BEGIN EXECUTE ('DROP SCHEMA ' + @OLDNAME) END GO
스키마 이름을 변경하는 절차를 실행합니다 : 예 :
EXECUTE RenameSchema 'oldname','newname' EXECUTE RenameSchema 'dbo','guest'
-
==============================
5.절차는
절차는
USE DatabaseName DECLARE @OldSchema AS varchar(255) DECLARE @NewSchema AS varchar(255) SET @OldSchema = 'ComputerLearn' SET @NewSchema = 'Basic' DECLARE @sql AS varchar(MAX) SET @sql = 'CREATE SCHEMA [' + @NewSchema + ']' + CHAR(13) + CHAR(10) SELECT @sql = @sql + 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' + sys.schemas.name + '].[' + sys.procedures.name + ']' + CHAR(13) + CHAR(10) FROM sys.procedures,sys.schemas WHERE sys.procedures.schema_id=sys.schemas.schema_id and sys.schemas.name = @OldSchema SET @sql = @sql + 'DROP SCHEMA [' + @OldSchema + ']' PRINT @sql IF (0=1) EXEC (@sql)
-
==============================
6.이것은 짧은 버전이지만 잘 작동합니다.
이것은 짧은 버전이지만 잘 작동합니다.
declare @sql varchar(8000), @table varchar(1000), @oldschema varchar(1000), @newschema varchar(1000) set @oldschema = 'old' set @newschema = 'dbo' 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
-
==============================
7.나를 위해 일한 것이 가장 쉬운 솔루션입니다 : 나는 두 개의 테이블 PopulationByCountrySTG 및 CountryRegionSTG와 하나의 스키마 DBO가
나를 위해 일한 것이 가장 쉬운 솔루션입니다 : 나는 두 개의 테이블 PopulationByCountrySTG 및 CountryRegionSTG와 하나의 스키마 DBO가
(1) I이 실행하여 새로운 스키마를 생성
create schema stg
(2) 나는 다음 명령을 실행
ALTER SCHEMA stg TRANSFER dbo.PopulationByCountrySTG; ALTER SCHEMA stg TRANSFER dbo.CountryRegionSTG;
모든 다. 당신 .. 감사 녀석을 위해 작동하는지 알려주세요.
from https://stackoverflow.com/questions/316485/rename-sql-server-schema by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내가 어떻게 벤치마킹을 위해 오라클 실행 계획 캐시를 삭제합니까? (0) | 2020.07.23 |
---|---|
[SQL] 가져 오기 이전 / 다음 기록 : 레일 (0) | 2020.07.23 |
[SQL] 선택하여 쿼리 결과에 행을 추가합니다 (0) | 2020.07.23 |
[SQL] 같은 서버의 다른 데이터베이스의 백업에서 새 데이터베이스 만들기? (0) | 2020.07.22 |
[SQL] 어떻게 테이블의 특정 컬럼의 첫 번째 문자를 제거하는 방법은 무엇입니까? (0) | 2020.07.22 |