programing

데이터베이스 전체 SQL-Server 스크립팅

showcode 2023. 4. 10. 22:24
반응형

데이터베이스 전체 SQL-Server 스크립팅

데이터베이스에서 모든 테이블, 프로세서 및 기타 객체의 스크립트를 가져올 수 있는 방법이 있습니까?데이터베이스를 스크립팅할 수 있는 옵션이 있는 것은 알고 있습니다만, 이것은 최상위 수준의 스크립트만 제공하고 있습니다.모든 테이블, procs, udfs 등을 작성하는 스크립트는 아닙니다.

Management Studio에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.작업 -> 스크립트 생성.

그 정도면 됐다.

기능을 하는 SchemaZen이라는 오픈소스 명령줄 유틸리티를 작성했습니다.관리 스튜디오에서 스크립팅하는 것보다 훨씬 빠르며, 버전 관리가 용이한 출력입니다.스키마 및 데이터 스크립팅을 모두 지원합니다.

실행 중인 스크립트를 생성하려면:

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 스크립트 생성의 조합을 사용하여 스키마와 데이터를 추출하고 키워드 해석과 토큰 기반의 스크립트 치환을 가능하게 하는 자체 데이터베이스 툴을 사용했습니다.또한 스크립트는 한 번만 적용됩니다.

왜요?

  • SQL Server 2000, 2005 및 2008에서의 설치를 지원해야 합니다.또한 버전 간에 데이터 타입이 변경되었습니다.예를 들어 2005+에는 nvarchar(max)가 있는 반면 2000에는 ntext만 지원됩니다.따라서 스크립트는 토큰을 사용하고 db 선택에 따라 올바른 유형으로 대체합니다.
  • 예를 들어 스크립트를 사용하여 새 데이터베이스를 작성한 후 몇 초를 기다리지 않으면 SQL Server가 테이블을 작성할 때 오류가 발생할 수 있습니다(데이터베이스 파일을 작성할 시간이 없었기 때문에).
  • 우리는 어떤 스크립트가 언제 실행되었는지에 대한 이력을 유지하고 싶었습니다.
  • Wix MSI instra에서 접속 문자열과 credential을 지정할 수 있도록 하고 싶었기 때문에 다시 토큰과 조건부 로직을 사용하여 스크립트에 이러한 credential을 전달할 수 있는 방법이 필요했습니다.

샘플 스크립트(간단하게 편집)

-- 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

RedGate SQL 패키지 보기를 권장합니다.그것은 무료는 아니지만 가격만큼의 가치가 있을 만큼 유용했다.

Management Studio 2012 및 2014의 모든 테이블 데이터 컨텐츠를 출력하기 위해 표 데이터를 살펴본 결과, 약간 숨겨져 있었지만, 몇 가지 확인 후 옵션을 찾았습니다.

  1. db 오른쪽 클릭
  2. [태스크] > [스크립트 생성]를 선택합니다..'
  3. '스크립팅 옵션 설정'에서 '고급'을 클릭합니다.
  4. General'에서 '스크립트할 데이터 유형'을 true로 설정합니다('General' 그룹의 맨 아래에 있음).

프로그래밍 방식으로 수행해야 하는 경우 SQL Server 2000에 대해 SQL DMO 라이브러리(OLE)를 사용할 수 있지만 SQL SMO 라이브러리(네이티브)를 사용하는 것이 좋습니다.SQL Server 2005 이상에 대한 NET 라이브러리).

이러한 라이브러리는 모두 SQL Server 관리 도구 설치에 필수적입니다.

이는 SQL Server Management Studio에서 전체 데이터베이스 스크립트를 생성하는 것이 충분하지 않은 경우입니다.

언급URL : https://stackoverflow.com/questions/1162339/script-entire-database-sql-server

반응형