[SQL] 거래 SQL은 다른 거래 SQL 스크립트를 실행합니다
SQL거래 SQL은 다른 거래 SQL 스크립트를 실행합니다
나는 각 테이블을 생성하고 데이터로 채우 10 TRANSACT의 SQL 스크립트가 있습니다.
나는 10 다른 스크립트의 각을 실행 한 마스터 SQL 스크립트를 만들려고하고 있습니다.
현재 TSQL 스크립트 내에서 다른 TSQL 스크립트를 실행하는 마이크로 소프트 SQL 서버 2008 SQL / TRANSACT SQL있는 방법이 있습니까?
이 작업은 SQL Server 관리 Studio (SSMS)를 통해 실행하기위한 것입니다.
감사!
해결법
-
==============================
1.당신이 SSMS에서 .SQL 파일을 실행하려고하는 경우이 시도 :
당신이 SSMS에서 .SQL 파일을 실행하려고하는 경우이 시도 :
:r C:\Scripts\Script1.sql :r C:\Scripts\Script2.sql :r C:\Scripts\Script3.sql ...
참고 :이 SQL 명령 모드에서 회전을 실행하기 위해 (쿼리> SQLCMD 모드)
이 당신이 매우 자주 스크립트를 실행하는 경우 당신은 저장된 프로 시저에 놓아 그들에게 그 방법을 실행하는 것이 좋습니다 ...
당신은 또한 (좀 더 일반적인 생각) SQLCMD를 통해 수행 할 수 있습니다
sqlcmd -S serverName\instanceName -i C:\Scripts\Script1.sql
-
==============================
2.아니면 그냥 변수로 스크립트를 읽고 그것을 실행하는 OPENROWSET 사용
아니면 그냥 변수로 스크립트를 읽고 그것을 실행하는 OPENROWSET 사용
DECLARE @SQL varchar(MAX) SELECT @SQL = BulkColumn FROM OPENROWSET ( BULK 'MeinPfad\MeinSkript.sql' , SINGLE_BLOB ) AS MYTABLE --PRINT @sql EXEC (@sql)
-
==============================
3.가장 간단한 방법은 스크립트가 저장 프로 시저를 만들 수 및 통화에 중앙 프로 시저에서 차례로 각 절차 (명령을 실행 비아) 것입니다. 당신이 이상 동일한 스크립트 (들)을 실행하려고하고 다시 (또는 전달 다른 매개 변수를 동일한 스크립트)하는 경우이 이상적입니다.
가장 간단한 방법은 스크립트가 저장 프로 시저를 만들 수 및 통화에 중앙 프로 시저에서 차례로 각 절차 (명령을 실행 비아) 것입니다. 당신이 이상 동일한 스크립트 (들)을 실행하려고하고 다시 (또는 전달 다른 매개 변수를 동일한 스크립트)하는 경우이 이상적입니다.
SQLCMD 모드가 활성화 될 때, r 명령 : @Abe Miesller 말한대로 스크립트가 .SQL (또는 텍스트의 모든 종류의) 파일을 경우 당신이를 통해 SSMS 내에서 실행할 수 있습니다 (upvoted). 당신은 정확한 파일 경로와 이름을 알고 스크립트해야합니다. 이것은 저장 프로 시저 내에서 수행 할 수 없습니다.
임의의 파일 이름 (예를 들어, 모든 파일이 현재 하위 폴더에로드)에 대한 "알려진"파일 이름 유용하고 필요한 마지막 대안은 확장 절차 XP_CMDSHELL의 힘을 활용하는 것입니다. 이러한 솔루션은 꽤 빨리 (이과에 간다, 파일, 빌드 목록을 검색하는 데 사용할 차례로 각 파일에 대해 SQLCMD를 호출 xp_cmdshell을 문자열을 통해 실행, 출력 파일을 통해 결과 및 오류 관리) 난 단지 좋겠 그래서 compelx 얻을 수 있습니다 최후의 수단으로이 작업을 수행.
-
==============================
4.당신은 거의 상호 교환 OSQL 또는 더 나은 아직 새로운 SQLCMD를 사용할 수 있습니다. 나는 코드 샘플 주위에 앉아 있지만, 생산에 내가 SQLCMD를 사용하고이 일어난 때문이 예에서 OSQL을 사용하고 있습니다. 여기에 내가 데이터베이스에 대해 업데이트 스크립트를 실행하는 데 사용하는 더 큰 과정에서 코드의 냈다된다. 내가 자료를 추적하는 규칙을 사용하여 내 스크립트의 이름으로 그들은 메이저, 마이너, 릴리스 빌드에 의해 정렬됩니다. 당신은 분명히 내 오류 나눠의 모든 누락, 나는 등 데이터베이스, 설정 변수에서 사용 가능한 스크립트를 당겨하지만 여전히 찾을 수있는 부분이 유용 니펫을.
당신은 거의 상호 교환 OSQL 또는 더 나은 아직 새로운 SQLCMD를 사용할 수 있습니다. 나는 코드 샘플 주위에 앉아 있지만, 생산에 내가 SQLCMD를 사용하고이 일어난 때문이 예에서 OSQL을 사용하고 있습니다. 여기에 내가 데이터베이스에 대해 업데이트 스크립트를 실행하는 데 사용하는 더 큰 과정에서 코드의 냈다된다. 내가 자료를 추적하는 규칙을 사용하여 내 스크립트의 이름으로 그들은 메이저, 마이너, 릴리스 빌드에 의해 정렬됩니다. 당신은 분명히 내 오류 나눠의 모든 누락, 나는 등 데이터베이스, 설정 변수에서 사용 가능한 스크립트를 당겨하지만 여전히 찾을 수있는 부분이 유용 니펫을.
OSQL 또는 SQLCMD를 사용하는 방법에 대한 같은 주요 부품 난 당신이 SSMS에서이 코드를 실행하거나 (아마도 일정에 따라라고도 함) 저장 프로 시저 또는 배치 파일에서 할 수 있다는 것입니다. 매우 유연합니다.
--Use cursor to run upgrade scripts DECLARE OSQL_cursor CURSOR READ_ONLY FOR SELECT FileName FROM #Scripts ORDER BY Major, Minor, Release, Build OPEN OSQL_cursor FETCH NEXT FROM OSQL_cursor INTO @name WHILE (@@fetch_status <> -1) BEGIN IF ((@@fetch_status <> -2) AND (@result = 0)) BEGIN SET @CommandString = 'osql -S ' + @@ServerName + ' -E -n -b -d ' + @DbName + ' -i "' + @Dir + @name + '"' EXEC @result = master.dbo.xp_cmdshell @CommandString, NO_OUTPUT IF (@result = 0) BEGIN SET @Seconds = DATEDIFF(s, @LastTime, GETDATE()) SET @Minutes = @Seconds / 60 SET @Seconds = @Seconds - (@Minutes * 60) PRINT 'Successfully applied ' + @name + ' in ' + cast(@Minutes as varchar) + ' minutes ' + cast(@Seconds as varchar) + ' seconds.' SET @LastTime = GETDATE() END ELSE BEGIN SET @errMessage = 'Error applying ' + @name + '! The database is in an unknown state and the schema may not match the version.' SET @errMessage = @errMessage + char(13) + 'To find the error restore the database to version ' + @StartingVersion SET @errMessage = @errMessage + ', set @UpToVersion = the last version successfully applied, then run ' + @name SET @errMessage = @errMessage + ' manually in Query Analyzer.' END IF @name = (@UpToVersion + '.sql') GOTO CleanUpCursor --Quit if the final script specified has been run. END FETCH ENDT FROM OSQL_cursor INTO @name END
-
==============================
5.당신은 자신의 개별 파일에 10 스크립트를 유지하려는 가정, 난 당신이 실행하는 당신이 원하는 순서대로 10 스크립트를 실행할 OSQL.EXE하는 배치 파일을 생성하는 것하고 싶은 일을 할 수있는 가장 쉬운 방법을 말할 것입니다.
당신은 자신의 개별 파일에 10 스크립트를 유지하려는 가정, 난 당신이 실행하는 당신이 원하는 순서대로 10 스크립트를 실행할 OSQL.EXE하는 배치 파일을 생성하는 것하고 싶은 일을 할 수있는 가장 쉬운 방법을 말할 것입니다.
-
==============================
6.내가 테스트를 실행하는 말을 나는 일련의 스크립트를 실행하려면 경로 변수를 정의하는 것이 유용, 같은 : : SETVAR 경로 "C : \ 코드 \ 지사 품질 보증" : r에 $ (경로) \ 테이블 \ client.sql : r에 $ (경로) \ 테이블 \ item.sql : r에 $ (경로) \ PROC \ clientreport.sql 간부 clientreport
내가 테스트를 실행하는 말을 나는 일련의 스크립트를 실행하려면 경로 변수를 정의하는 것이 유용, 같은 : : SETVAR 경로 "C : \ 코드 \ 지사 품질 보증" : r에 $ (경로) \ 테이블 \ client.sql : r에 $ (경로) \ 테이블 \ item.sql : r에 $ (경로) \ PROC \ clientreport.sql 간부 clientreport
from https://stackoverflow.com/questions/5237198/transactsql-to-run-another-transactsql-script by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 임의의 데이터와 SQL 채우기 테이블 (0) | 2020.05.21 |
---|---|
[SQL] MySQL의 쿼리은 "테이블"에서 데이터를 선택합니다 (0) | 2020.05.21 |
[SQL] SQL 서버는 테이블과 피벗 가입 (0) | 2020.05.21 |
[SQL] 하나 개의 쿼리로 여러 행을 업데이트? (0) | 2020.05.21 |
[SQL] SQLite는 주문 Date1530019888000 (0) | 2020.05.21 |