복붙노트

[SQL] 어떻게 PowerShell을 사용 .SQL 파일을 실행하려면?

SQL

어떻게 PowerShell을 사용 .SQL 파일을 실행하려면?

나는 .SQL 파일이 있습니다. 나는 파워 쉘 스크립트를 통해 및 .SQL 파일 된 invoke 연결 문자열 정보를 전달하려합니다.

내가 검색했고 호출-SQLCMD 관련된 cmdlet을 함께했다. 내가 SQL에 해당하는 모듈을 찾기 위해 노력하고있는 동안, 나는 내 컴퓨터에 하나를 찾을 수 없습니다.

나는 내 컴퓨터에 아무것도 설치해야합니다 (기계는 이미 SQL Server 관리 Studio 2008 R2는있다) 모듈을 얻기 위해 또는 PowerShell을 사용 .SQL 파일을 실행할 수있는 쉬운 방법은 무엇입니까?

해결법

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

    1.SQL 스냅인이 존재하는지 확인하십시오 :

    SQL 스냅인이 존재하는지 확인하십시오 :

    get-pssnapin -Registered
    
    Name        : SqlServerCmdletSnapin100
    PSVersion   : 2.0
    Description : This is a PowerShell snap-in that includes various SQL Server cmdlets.
    
    Name        : SqlServerProviderSnapin100
    PSVersion   : 2.0
    Description : SQL Server Provider
    

    그렇다면

    Add-PSSnapin SqlServerCmdletSnapin100 # here lives Invoke-SqlCmd
    Add-PSSnapin SqlServerProviderSnapin100
    

    당신은 이런 식으로 뭔가를 할 수 :

    invoke-sqlcmd -inputfile "c:\mysqlfile.sql" -serverinstance "servername\serverinstance" -database "mydatabase" # the parameter -database can be omitted based on what your sql script does.
    
  2. ==============================

    2.MSDN에 가져 SQLPS 모듈에서 인용,

    MSDN에 가져 SQLPS 모듈에서 인용,

    그래서, 그래, 당신은 기독교에 의해 설명 추가 - PSSnapin 접근 방식을 사용할 수 있지만 SQLPS 권장 모듈 접근 방식을 감사하는 것이 유용하다.

    당신은 단순히 가져 오기 - 모듈 SQLPS를 통해 (일반적으로 프로필에) 다른 같은 모듈을로드 할 수 있도록 SQLPS은 설치에 포함되어 있습니다 : 가장 간단한 경우는 SQL 서버 2012 있다고 가정합니다. 모듈 가져 오기 모듈 -ListAvailable와 시스템에 사용할 수 있는지 확인할 수 있습니다.

    당신은 SQL 서버 2012이없는 경우, 모든 당신이 할 필요는 GET-모듈 / 가져 오기 - 모듈을 찾을 수 있도록 SQLPS이 모듈 디렉토리에 모듈 다운로드 할 수 있습니다. 호기심, 마이크로 소프트는 다운로드 할 수있는이 모듈을하지 않습니다! 그러나, 차드 밀러는 친절하게 필요한 조각을 포장이 모듈 다운로드를 제공하고 있습니다. 당신의 ... 문서 \의 WindowsPowerShell \ 모듈 디렉토리 아래 및 가져 오기를 진행 그것의 압축을 풉니 다.

    이 모듈 접근 방식과 스냅인 방식이 동일하지 않은 것을주의하는 것이 재미있다. 그런 다음 가져 오기-PSSnapin 실행 스냅인 (snapin)합니다 (-registered 매개 변수없이 넣은 것만 보여주기)를로드하는 경우에는 SQL 스냅인 (snapin)를 볼 수 있습니다. 반면에, 당신은로드하면 SQLPS는 GET-PSSnapin에서, 스냅인 (snapin)가로드 표시되지 않습니다 다양한 블로그 항목 있도록에만 검사 스냅인 (snapin)에 의해 호출-SQLCMD cmdlet의 검사가 위음성 결과를 제공 할 수 있다는 모듈.

    2012년 10월 6일 업데이트

    SQLPS 모듈 대에 전체 이야기를 들어 SQL 서버 대 SQLPS 미니 쉘 스냅인을 최근 Simple-Talk.com에 게시 된 내 두 부분으로 SQL 서버 개발자를위한 미니 시리즈 실용 PowerShell 및 DBA를 살펴보고 내가 가지고있는 경우, 한 독자의 의견에 따라, 성공적으로 문제를 "드 혼란". :-)

  3. ==============================

    3.

    if(Test-Path "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS") { #Sql Server 2012
        Import-Module SqlPs -DisableNameChecking
        C: # Switch back from SqlServer
    } else { #Sql Server 2008
        Add-PSSnapin SqlServerCmdletSnapin100 # here live Invoke-SqlCmd
    }
    
    Invoke-Sqlcmd -InputFile "MySqlScript.sql" -ServerInstance "Database name" -ErrorAction 'Stop' -Verbose -QueryTimeout 1800 # 30min
    
  4. ==============================

    4.여기에 내가로드 SQL 스냅인 (snapin) 내 PowerShell 프로필에 가지고있는 기능은 다음과 같습니다

    여기에 내가로드 SQL 스냅인 (snapin) 내 PowerShell 프로필에 가지고있는 기능은 다음과 같습니다

    function Load-SQL-Server-Snap-Ins
    {
        try 
        {
            $sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"
    
            if (!(Test-Path $sqlpsreg -ErrorAction "SilentlyContinue"))
            {
                throw "SQL Server Powershell is not installed yet (part of SQLServer installation)."
            }
    
            $item = Get-ItemProperty $sqlpsreg
            $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
    
            $assemblyList = @(
                "Microsoft.SqlServer.Smo",
                "Microsoft.SqlServer.SmoExtended",
                "Microsoft.SqlServer.Dmf",
                "Microsoft.SqlServer.WmiEnum",
                "Microsoft.SqlServer.SqlWmiManagement",
                "Microsoft.SqlServer.ConnectionInfo ",
                "Microsoft.SqlServer.Management.RegisteredServers",
                "Microsoft.SqlServer.Management.Sdk.Sfc",
                "Microsoft.SqlServer.SqlEnum",
                "Microsoft.SqlServer.RegSvrEnum",
                "Microsoft.SqlServer.ServiceBrokerEnum",
                "Microsoft.SqlServer.ConnectionInfoExtended",
                "Microsoft.SqlServer.Management.Collector",
                "Microsoft.SqlServer.Management.CollectorEnum"
            )
    
            foreach ($assembly in $assemblyList)
            { 
                $assembly = [System.Reflection.Assembly]::LoadWithPartialName($assembly) 
                if ($assembly -eq $null)
                    { Write-Host "`t`t($MyInvocation.InvocationName): Could not load $assembly" }
            }
    
            Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
            Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
            Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
            Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000
    
            Push-Location
    
             if ((Get-PSSnapin -Name SqlServerProviderSnapin100 -ErrorAction SilentlyContinue) -eq $null) 
            { 
                cd $sqlpsPath
    
                Add-PsSnapin SqlServerProviderSnapin100 -ErrorAction Stop
                Add-PsSnapin SqlServerCmdletSnapin100 -ErrorAction Stop
                Update-TypeData -PrependPath SQLProvider.Types.ps1xml
                Update-FormatData -PrependPath SQLProvider.Format.ps1xml
            }
        } 
    
        catch 
        {
            Write-Host "`t`t$($MyInvocation.InvocationName): $_" 
        }
    
        finally
        {
            Pop-Location
        }
    }
    
  5. ==============================

    5.2008 Server 2008 및 2008 R2와

    2008 Server 2008 및 2008 R2와

    Add-PSSnapin -Name SqlServerCmdletSnapin100, SqlServerProviderSnapin100
    

    2012 년과 2014 년에

    Push-Location
    Import-Module -Name SQLPS -DisableNameChecking
    Pop-Location
    
  6. from https://stackoverflow.com/questions/10894688/how-to-execute-sql-file-using-powershell by cc-by-sa and MIT license