데이터베이스에서 모든 테이블, 프로세스 및 기타 개체의 스크립팅을 얻을 수있는 방법이 있습니까? 데이터베이스를 스크립팅하는 옵션이 있다는 것을 알고 있지만 모든 테이블, procs, udfs, .etc를 생성하는 스크립트가 아닌 일종의 최상위 스크립트 만 제공했습니다.
데이터베이스에서 모든 테이블, 프로세스 및 기타 개체의 스크립팅을 얻을 수있는 방법이 있습니까? 데이터베이스를 스크립팅하는 옵션이 있다는 것을 알고 있지만 모든 테이블, procs, udfs, .etc를 생성하는 스크립트가 아닌 일종의 최상위 스크립트 만 제공했습니다.
답변:
Management Studio에서 데이터베이스를 마우스 오른쪽 단추로 클릭하십시오. 작업-> 스크립트 생성.
그렇게해야합니다.
이 작업 을 수행하는 SchemaZen 이라는 오픈 소스 명령 줄 유틸리티를 작성했습니다 . Management Studio의 스크립팅보다 훨씬 빠르며 출력은 버전 관리에 더 친숙합니다. 스키마와 데이터 모두 스크립팅을 지원합니다.
스크립트를 생성하려면 다음을 실행하십시오.
schemazen.exe 스크립트 --server localhost --database db --scriptDir c : \ somedir
그런 다음 스크립트에서 데이터베이스를 다시 작성하려면 다음을 실행하십시오.
schemazen.exe create --server localhost --database db --scriptDir c : \ somedir
이 작업을위한 유틸리티 인 SMOscript를 작성했습니다 .
스크립트 생성은 SMO 라이브러리에서 수행되며 SQL 2005 및 2008의 새로운 개체 유형을 지원합니다.
결국 SSMS 스크립트 생성 조합을 사용하여 스키마와 데이터를 추출한 다음 스크립트에서 키워드 구문 분석 및 토큰 기반 교체를 허용하는 자체 데이터베이스 도구를 사용했습니다. 또한 스크립트가 한 번만 적용되도록합니다.
왜?
예제 스크립트 (간결성을 위해 편집 됨)
-- Sleep: 5
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO
EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO
USE [$Database$]
GO
IF '1'!='$IntegratedSecurity$'
BEGIN
CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
CREATE USER [$User$] FOR LOGIN [$Login$]
EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO