SQL Server에“포함 파일”이라는 개념이 있습니까?


19

특정 순서로 실행해야하는 스크립트 세트가 있습니다. 다른 모든 파일과 올바른 순서를 나열하는 "마스터 파일"을 만들고 싶습니다. 기본적으로 C ++ 또는 ASP / VBScript의 포함 파일과 같습니다.

답변:


19

당신이 사용하는 경우 SQLCMD를 , 당신이 사용할 수있는 :r FileName별도의 .SQL 파일을 포함 할 수 있습니다.

: r 파일 이름

FileName으로 지정된 파일의 추가 T-SQL 문 및 SQLCMD 명령을 명령문 캐시로 구문 분석합니다. FileName은 Visual Studio의 시작 디렉토리를 기준으로 읽습니다. 배치 종결자가 발생한 후 파일을 읽고 실행합니다. 여러 개의 : r 명령을 실행할 수 있습니다. 파일은 도구, 옵션에 정의 된 배치 종결자를 포함하여 모든 SQLCMD 명령을 포함 할 수 있습니다. 배포 전 또는 배포 후 스크립트에서 : r을 사용하여 다른 스크립트를 포함 할 수 있습니다.


이 기능을 직접 사용하고 있습니까?
bernd_k

SQL Server Data Tools 프로젝트에서 많이 사용하고 있습니다. 포스트 스크립트로 실행되는 샘플 데이터를 구성하려고 할 때 실제로 도움이됩니다.
Jonathan Allen

4

고대의 의미에서 C의 전처리 확실히 없음

  • T-SQL 자체에는 그러한 개념이 없습니다.
  • SSMS의 sqlcmd 및 sqlcmdmode는 상대 파일 경로를 처리하지 않습니다.
  • SSMS의 sqlcmd 및 sqlcmdmode는 다음을 포함하는 조건부를 지원하지 않습니다.

주어진 절대 경로를 가진 파일 세트가 있고 무조건 순서로 포함 시키려면 명령 행 도구 sqlcmd를 사용하거나 @mfredrickson 및 @Marian이 언급 한 sqlcmdmode에서 SSMS를 사용할 수 있습니다.


그러나 상대 경로 또는 조건부 포함을 원하면 sqlcmd 또는 더 이상 사용되지 않는 선행 작업 중 하나 인 isql 또는 osql을 호출하는 래퍼를 사용해야합니다.

현재이 상황에서 직장에서 나는 오래된 vbs와 hta 코드를 검토하고 확장하고 있습니다. 나는 완전히 행복하지는 않지만 실용적인 결정입니다. 작동 중이며 최종 사용자는 hta GUI를 사용하여 집에 있으며 추가 소프트웨어 설치가 필요하지 않습니다.

새로운 디자인을 위해 WPF와 PowerShell을 사용하여 sqlcmd 호출을 래핑하는 것에 대해 생각하기 시작하지만 현재 고객과 함께 PowerShell V2가 있다고 가정 할 수는 없습니다.

이전에도이 목적을 위해 간단한 cmd 배치를 작성했는데 일부는 여전히 사용 중입니다.

현재 도구, 특히 워크 플로를 대상으로하는 도구가 여기에 적합하다고 생각합니다. 나는 그것들에 익숙하지 않다.


3

Management Studio 의 SQLCMD 모드 와 함께 배치 파일을 사용하여 마스터 파일로 사용하여 SQLCMD 유틸리티 를 사용하여 모든 SQL 파일을 정렬하고 호출 할 수도 있습니다 .

SQLCMD 모드는 Management Studio 내에서 유틸리티 사용을 시뮬레이션 한 것이므로 모드간에 큰 차이는 없습니다. 언젠가는 배치를 실행하는 것을 선호합니다 (M Studio를 더 이상 열지 않고 올바른 db로드 등). 출력 파일을 포함하여 배치의 모든 것을 구성하는 것을 선호합니다.


2

T-SQL 프리 프로세서가 잘못 필요하다는 데 동의합니다. 나는 C #으로 자신의 것을 개발했는데, 한 시간이 걸렸습니다. SQL 스크립트의 실행 순서를 제어하는 ​​것 외에도 스칼라 UDF처럼 보이고 사용하기 편리하지만 인라인 UDF만큼 빠른 매크로를 가질 수 있습니다.


+1-여러 번 템플릿 도구를 사용하여 이러한 작업을 수행했습니다. sqlcmd에는 변수 대체를위한 몇 가지 기능이 있지만 SSMS를 위해 적절한 매크로 프리 프로세서 플러그인을 구현 한 사람에게 맨 아래에 큰 키스를 줄 것입니다.
ConcernedOfTunbridgeWells

1
@AK, 좀 더 자세히 설명해 주시겠습니까? 아마도 github에 코드를 게시 할 수 있습니까?
craig

2

bernd_k의 답변이 마음에 듭니다 . 숫자를 포함하여 스크립트 이름을 지정한 방법에 따라 SQL Server 2008 이상을 실행하는 경우 SQLPS (SQL Server PowerShell)를 사용할 수 있습니다. 그런 다음 SQL 2005를 사용하는 경우에도 PowerShell 및 2005의 SMO를 활용할 수 있습니다.

참고 사항 : SQLCMD는 결국 감가 상각 목록에 포함될 것이며 SQLPS, PowerShell로 대체되고 있다고 생각합니다.

다른 옵션들도 있습니다.

  1. SQL 에이전트 작업의 단계로 각 스크립트를 설정하십시오. 실행 순서를 설정할 수 있습니다.
  2. 각 파일을 호출 할 SSIS 패키지를 작성하십시오. 이것은 조금 더 많은 제어를 제공하고 조금 더 많은 로깅 옵션을 제공 할 수 있습니다. 다음 스크립트를 실행하기 전에 한 스크립트의 결과를 확인해야하는 경우이 방법이 마음에 듭니다.

SQLCMD가 SQL Server 데이터 도구 및 DACPAC의 작동 방식에 매우 중요하므로 감가 상각비가 될 것으로 생각하지 않습니다.
Jonathan Allen

@JonathanAllen 내가 찾은 것의 대부분은 PowerShell을 참조SQLCMD 하기 때문에 알려주세요 . 또한 스키마 비교를 제외하고 SSDT와 함께 사용되는 참조 는 보이지 않지만 생성 된 스크립트는 사용하지 않습니다. sqlcmd
Shawn Melton

SSDT 스크립트는 sqlcmd 스크립트입니다. 이것이 사용자 정의 및 데이터베이스 이름과 같은 매개 변수를 처리하는 방법입니다. SqlPackage.exe를 사용하여 DACPAC를 배포하려는 경우이 링크는 sqlcmd 매개 변수를 전달하는 방법을 보여줍니다. msdn.microsoft.com/ko-kr/…
Jonathan Allen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.