Executing SQL Scripts in PowerShell are GO

Executing SQL Scripts in PowerShell are GO

Another quick snippet showing how to split a SQL script at the GO statements to execute a potentially large set of script in smaller chunks - and be better able to work out which piece went wrong.


Import-Module "sqlps" -DisableNameChecking

# Run these scripts in order...

$SqlFiles = @(
'Example1.sql',
'Example2.sql'
)

# Using a trusted connection...

$SqlServer = "MyMachine\MyInstance"
$SqlDatabase = "MyNewDatabase"

$SqlFiles | ForEach-Object {

    $SqlFile = $_

    Write-Host "Running Script $SqlFile"

    # Read each group of statements separated by a "go"
    Get-Content $SqlFile -Delimiter "GO" | ForEach-Object {

    	$SqlStatement = $_

    	Write-Host $SqlStatement

    	Invoke-Sqlcmd $SqlStatement -ServerInstance $SqlServer -Database $SqlDatabase
    }

}

This is for illustration only so I'm using Write-Host. Obviously if I was a serious PowerShell person I would use Write-Verbose or Write-Progress.