Jak wykonać.plik sql za pomocą powershell?

Mam .sql plik. Próbuję przekazać szczegóły łańcucha połączeń przez skrypt Powershell i wywołać plik .sql.

Szukałem i znalazłem cmdlet związany z Invoke-sqlcmd. Podczas gdy próbowałem znaleźć moduł odpowiadający SQL, nie znalazłem żadnego w moim komputerze.

Czy powinienem zainstalować cokolwiek w mojej maszynie (maszyna ma już SQL Server Management Studio 2008 R2), aby uzyskać Moduły lub jest jakiś łatwy sposób na wykonanie plików .sql za pomocą Powershell?

Author: Ryan Shripat, 2012-06-05

5 answers

Spróbuj sprawdzić, czy są obecne przystawki 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

Jeśli tak

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

Wtedy możesz zrobić coś takiego:

invoke-sqlcmd -inputfile "c:\mysqlfile.sql" -serverinstance "servername\serverinstance" -database "mydatabase" # the parameter -database can be omitted based on what your sql script does.
 86
Author: CB.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 13:28:18

Cytowanie z Import modułu SQLPS na MSDN,

Zalecanym sposobem zarządzania serwerem SQL z PowerShell jest import moduł sqlps w środowisku Windows PowerShell 2.0.

Więc, tak, możesz użyć podejścia Add-PSSnapin opisanego przez Christiana, ale warto również docenić zalecane podejście modułu sqlps.

Najprostszy przypadek zakłada, że masz SQL Server 2012: sqlps jest zawarty w instalacji, więc wystarczy załadować moduł jak każdy inny (zazwyczaj w profilu ) Poprzez Import-Module sqlps. Możesz sprawdzić, czy moduł jest dostępny w Twoim systemie za pomocą Get-Module -ListAvailable.

Jeśli nie masz SQL Server 2012, wystarczy pobrać moduł sqlps do katalogu modules, aby Get-Module/Import-Module go znalazł. Co ciekawe, Microsoft nie udostępnia ten moduł do pobrania! Jednak Chad Miller uprzejmie zapakował wymagane elementy i dostarczył ten moduł Pobierz . Rozepnij go pod swoim ...Documents \ windowspowershell \ Modules katalog i kontynuować import.

Warto zauważyć, że podejście modułowe i podejście snapin nie są identyczne. Jeśli załadujesz snapiny, Uruchom Get-PSSnapin (bez parametru-Registered, aby pokazać tylko to, co załadowałeś) zobaczysz snapiny SQL. Jeśli natomiast załadujesz moduł sqlps Get-PSSnapin nie pokaże załadowanych snapinów, więc różne blogi wpisy, które testują dla Invoke-Sqlcmd cmdlet tylko badając snapiny, mogą dać fałszywie ujemny wynik.

2012.10.06 Update

Aby zapoznać się z pełną historią dotyczącą modułu sqlps vs. sqlps mini-shell vs. SQL Server snap-ins, spójrz na moją dwuczęściową mini-serię praktyczny PowerShell dla programistów SQL Server i DBAs ostatnio opublikowaną na Simple-Talk.com gdzie, zgodnie z komentarzem jednego z czytelników, z powodzeniem "zdezorientowałem" sprawę. :-)
 40
Author: Michael Sorens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 05:40:13
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
 5
Author: Brent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-11 17:27:54

Oto funkcja, którą mam w moim profilu PowerShell do ładowania snapinów SQL:

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
    }
}
 3
Author: David Brabant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-12 11:30:40

Z 2008 Server 2008 i 2008 R2

Add-PSSnapin -Name SqlServerCmdletSnapin100, SqlServerProviderSnapin100

Z 2012 i 2014

Push-Location
Import-Module -Name SQLPS -DisableNameChecking
Pop-Location
 0
Author: emekm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 16:30:31