[SQL] 그것은 SQL 쿼리의 텍스트 파일을 실행할 수 있습니까?
SQL그것은 SQL 쿼리의 텍스트 파일을 실행할 수 있습니까?
나는 연속적으로 실행하도록 생성 된 .SQL 파일의 번호를 가지고있다. 나는 쿼리 (즉, 쿼리 분석기 / Server 관리 Studio)에서 SQL 문에서 실행할 싶습니다. 이 같은 일을하고있는 경우이 작업을 수행하는 구문은 무엇인가 있도록 할 수 있습니까?
내가 좋아하는 뭔가를 바라고 있어요 :
exec 'c:\temp\file01.sql'
exec 'c:\temp\file02.sql'
나는 SQL 서버 2005를 사용 및 관리 스튜디오에서 쿼리를 실행하고 있습니다.
해결법
-
==============================
1.xp_cmdshell을하고 SQLCMD 사용
xp_cmdshell을하고 SQLCMD 사용
EXEC xp_cmdshell 'sqlcmd -S ' + @DBServerName + ' -d ' + @DBName + ' -i ' + @FilePathName
-
==============================
2.매우 도움이 덕분에,이 링크를 참조 : SQL Server 스크립트를 실행 비슷한 예를 들어. 와 아래 참조 해제 xp_cmdshell을 설정하려면 :
매우 도움이 덕분에,이 링크를 참조 : SQL Server 스크립트를 실행 비슷한 예를 들어. 와 아래 참조 해제 xp_cmdshell을 설정하려면 :
의 위에
SET NOCOUNT ON EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE
떨어져서
EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE EXEC master.dbo.sp_configure 'show advanced options', 0 RECONFIGURE SET NOCOUNT OFF
-
==============================
3.아니면 그냥 변수로 스크립트를 읽고 그것을 실행하는 OPENROWSET 사용 (죄송 8 세 항목을 소생) :
아니면 그냥 변수로 스크립트를 읽고 그것을 실행하는 OPENROWSET 사용 (죄송 8 세 항목을 소생) :
DECLARE @SQL varchar(MAX) SELECT @SQL = BulkColumn FROM OPENROWSET ( BULK 'MeinPfad\MeinSkript.sql' , SINGLE_BLOB ) AS MYTABLE --PRINT @sql EXEC (@sql)
-
==============================
4.이것은 내가 사용하는 것입니다. 잘 작동하고 재사용 간단하다. 이 디렉토리에있는 모든 파일을 읽을 변경할 수 있지만이 방법은 내가 사람이 실행 제어에 도착.
이것은 내가 사용하는 것입니다. 잘 작동하고 재사용 간단하다. 이 디렉토리에있는 모든 파일을 읽을 변경할 수 있지만이 방법은 내가 사람이 실행 제어에 도착.
/* execute a list of .sql files against the server and DB specified */ SET NOCOUNT ON SET XACT_ABORT ON BEGIN TRAN DECLARE @DBServerName VARCHAR(100) = 'servername' DECLARE @DBName VARCHAR(100) = 'db name' DECLARE @FilePath VARCHAR(200) = 'path to scrips\' /* create a holder for all filenames to be executed */ DECLARE @FileList TABLE (Files NVARCHAR(MAX)) INSERT INTO @FileList VALUES ('script 1.sql') INSERT INTO @FileList VALUES ('script 2.sql') INSERT INTO @FileList VALUES ('script X.sql') WHILE (SELECT COUNT(Files) FROM @FileList) > 0 BEGIN /* execute each file one at a time */ DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) Files FROM @FileList) DECLARE @command VARCHAR(500) = 'sqlcmd -S ' + @DBServerName + ' -d ' + @DBName + ' -i "' + @FilePath + @Filename +'"' EXEC xp_cmdshell @command PRINT 'EXECUTED: ' + @FileName DELETE FROM @FileList WHERE Files = @FileName END COMMIT TRAN
-
==============================
5.나는이 일을하지 않는 것이 좋습니다,하지만 당신이 정말로 필요하다면 다음 확장 저장 프로 시저 xp_cmdshell을 당신이 원하는합니다. 먼저 변수로 파일의 내용을 읽고 다음과 같은 것을 사용해야합니다 :
나는이 일을하지 않는 것이 좋습니다,하지만 당신이 정말로 필요하다면 다음 확장 저장 프로 시저 xp_cmdshell을 당신이 원하는합니다. 먼저 변수로 파일의 내용을 읽고 다음과 같은 것을 사용해야합니다 :
DECLARE @cmd sysname, @var sysname SET @var = 'Hello world' SET @cmd = 'echo ' + @var + ' > var_out.txt' EXEC master..xp_cmdshell @cmd
참고 :이 때문에 백그라운드에서 xp_cmdshell을 실행 명령은, 사용자의 입력을 필요로하는 프로그램을 실행하는 데 사용할 수 없습니다.
-
==============================
6.OSQL를 살펴 보자. 이 유틸리티를 사용하면 명령 프롬프트에서 SQL을 실행할 수 있습니다. 그것은 시스템에 설치하기가 쉽고, 나는 그것이 무료로 SQL Server Express를 함께 제공됩니다 생각합니다.
OSQL를 살펴 보자. 이 유틸리티를 사용하면 명령 프롬프트에서 SQL을 실행할 수 있습니다. 그것은 시스템에 설치하기가 쉽고, 나는 그것이 무료로 SQL Server Express를 함께 제공됩니다 생각합니다.
osql 유틸리티를 사용하여
스택 오버 플로우 쇼에 "NOSQL"의 빠른 검색은 물건을 많이 사용할 수 있습니다.
제대로 처리하기 위해 중요한 것은 명령 행에서 전달받을 사용자 및 암호 계정 매개 변수입니다. 나는 암호를 사용하여 파일을 제어 할 수 NT 파일 액세스 권한을 사용하고 스크립트가 시작하는이 파일의 내용을 사용하여 배치 파일을 보았다. 또한 빠른 C # 또는 Process 클래스를 사용하여 실행 VB 프로그램을 작성할 수 있습니다.
-
==============================
7.창문을 열어 명령 줄 (CMD)
창문을 열어 명령 줄 (CMD)
sqlcmd -S localhost -d NorthWind -i "C:\MyScript.sql"
-
==============================
8.Windows 인증의 경우, 다른 사용자로 실행중인 경우 : 열기 명령 Windows 사용자로 프롬프트 (마우스 오른쪽 클릭, 파일 열기 위치, Shift + 마우스 오른쪽 클릭, 실행을 다른 사용자로)
Windows 인증의 경우, 다른 사용자로 실행중인 경우 : 열기 명령 Windows 사용자로 프롬프트 (마우스 오른쪽 클릭, 파일 열기 위치, Shift + 마우스 오른쪽 클릭, 실행을 다른 사용자로)
sqlcmd -S localhost\SQLEXPRESS -d DatabaseName-i "c:\temp\script.sql"
또는하여 SQL Server 사용자를 사용하는 경우 :
sqlcmd -S localhost\SQLEXPRESS -d DatabaseName-i "c:\temp\script.sql" -U UserName -P Password
로컬 호스트 \ SQLEXPRESS 당신과 함께 서버 이름하지 않을 경우 로컬 서버를 교체합니다.
-
==============================
9.내가 한이 유용하게 찾을 수있는 것처럼이 질문에 비틀 거리는 사람을 위해, 나는 (루프 파일에서 SQL을 실행) 브루스 톰슨의 답변을 좋아하지만 (이 xp_cmdshell을을 사용하여 피할로) 나는 파일 실행에 Pesche Helfer의 접근 방식을 선호했다.
내가 한이 유용하게 찾을 수있는 것처럼이 질문에 비틀 거리는 사람을 위해, 나는 (루프 파일에서 SQL을 실행) 브루스 톰슨의 답변을 좋아하지만 (이 xp_cmdshell을을 사용하여 피할로) 나는 파일 실행에 Pesche Helfer의 접근 방식을 선호했다.
나는이 두 가지를 결합 그래서 (그리고 불통 약간 그래서 대신 수동으로 생성 목록의 폴더에서 모든 것을 실행) :
DECLARE @Dir NVARCHAR(512) = 'd:\SQLScriptsDirectory' DECLARE @FileList TABLE ( subdirectory NVARCHAR(512), depth int, [file] bit ) INSERT @FileList EXEC Master.dbo.xp_DirTree @Dir,1,1 WHILE (SELECT COUNT(*) FROM @FileList) > 0 BEGIN DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) subdirectory FROM @FileList) DECLARE @FullPath NVARCHAR(MAX) = @Dir + '\' + @FileName DECLARE @SQL NVARCHAR(MAX) DECLARE @SQL_TO_EXEC NVARCHAR(MAX) SELECT @SQL_TO_EXEC = 'select @SQL = BulkColumn FROM OPENROWSET ( BULK ''' + @FullPath + ''' , SINGLE_BLOB ) AS MYTABLE' DECLARE @parmsdeclare NVARCHAR(4000) = '@SQL varchar(max) OUTPUT' EXEC sp_executesql @stmt = @SQL_TO_EXEC , @params = @parmsdeclare , @SQL = @SQL OUTPUT EXEC (@sql) DELETE FROM @FileList WHERE subdirectory = @FileName PRINT 'EXECUTED: ' + @FileName END
from https://stackoverflow.com/questions/241925/is-it-possible-to-execute-a-text-file-from-sql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 2008 R2에 대한 Try_Convert (0) | 2020.06.25 |
---|---|
[SQL] OLE DB 공급자 연결된 서버 "Microsoft.ACE.OLEDB.12.0" "(널)" (0) | 2020.06.25 |
[SQL] 에 "&"가 포함 된 문자열을 삽입하는 방법 (0) | 2020.06.25 |
[SQL] SQL은 어떻게 선택 반환 값을 바꾸려면? (0) | 2020.06.25 |
[SQL] Oracle 용으로 생성 SQL 삽입 (0) | 2020.06.25 |