복붙노트

[SQL] 그것은 SQL 쿼리의 텍스트 파일을 실행할 수 있습니까?

SQL

그것은 SQL 쿼리의 텍스트 파일을 실행할 수 있습니까?

나는 연속적으로 실행하도록 생성 된 .SQL 파일의 번호를 가지고있다. 나는 쿼리 (즉, 쿼리 분석기 / Server 관리 Studio)에서 SQL 문에서 실행할 싶습니다. 이 같은 일을하고있는 경우이 작업을 수행하는 구문은 무엇인가 있도록 할 수 있습니까?

내가 좋아하는 뭔가를 바라고 있어요 :

exec 'c:\temp\file01.sql' 
exec 'c:\temp\file02.sql'

나는 SQL 서버 2005를 사용 및 관리 스튜디오에서 쿼리를 실행하고 있습니다.

해결법

  1. ==============================

    1.xp_cmdshell을하고 SQLCMD 사용

    xp_cmdshell을하고 SQLCMD 사용

    EXEC xp_cmdshell  'sqlcmd -S ' + @DBServerName + ' -d  ' + @DBName + ' -i ' + @FilePathName
    
  2. ==============================

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

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

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

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

    6.OSQL를 살펴 보자. 이 유틸리티를 사용하면 명령 프롬프트에서 SQL을 실행할 수 있습니다. 그것은 시스템에 설치하기가 쉽고, 나는 그것이 무료로 SQL Server Express를 함께 제공됩니다 생각합니다.

    OSQL를 살펴 보자. 이 유틸리티를 사용하면 명령 프롬프트에서 SQL을 실행할 수 있습니다. 그것은 시스템에 설치하기가 쉽고, 나는 그것이 무료로 SQL Server Express를 함께 제공됩니다 생각합니다.

    osql 유틸리티를 사용하여

    스택 오버 플로우 쇼에 "NOSQL"의 빠른 검색은 물건을 많이 사용할 수 있습니다.

    제대로 처리하기 위해 중요한 것은 명령 행에서 전달받을 사용자 및 암호 계정 매개 변수입니다. 나는 암호를 사용하여 파일을 제어 할 수 NT 파일 액세스 권한을 사용하고 스크립트가 시작하는이 파일의 내용을 사용하여 배치 파일을 보았다. 또한 빠른 C # 또는 Process 클래스를 사용하여 실행 VB 프로그램을 작성할 수 있습니다.

  7. ==============================

    7.창문을 열어 명령 줄 (CMD)

    창문을 열어 명령 줄 (CMD)

    sqlcmd -S localhost -d NorthWind -i "C:\MyScript.sql"
    
  8. ==============================

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

    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
    
  10. from https://stackoverflow.com/questions/241925/is-it-possible-to-execute-a-text-file-from-sql-query by cc-by-sa and MIT license