2016-05-26 1 views
1

Я медленно участвую в использовании Powershell и как новичок, пожалуйста, будьте легко на меня. Я создал сценарий Powershell, который сгенерировал бы инструкцию insert из нескольких файлов excel и сохранил бы ее в отдельных текстовых файлах. Как я могу использовать Powershell для выполнения текстовых файлов на SQL Server?Powershell: Как выполнить несколько файлов txt на SQL Server

+0

Нужна ли коробка передач? Он легко доступен через командную строку Windows. – qxg

+0

Да @DaveSexton –

ответ

0

Ваш комментарий действительно был очень полезным. Так как у меня нет GO заявления на мои текстовые файлы я использовал этот метод, который я производном от вашего @ShawnMelton

#Get list of files 
$Files = Get-ChildItem 'C:\Users\Me\Documents\Test\*.txt' 


try { 
    $Filename = $File.BaseName 

    foreach ($file in $files) { 

    Invoke-sqlcmd -ServerInstance "ServerName" -Database "Test" -InputFile $file -ErrorAction Stop 
    Write-Host -ForegroundColor Green "EXECUTED SuCCESSFULLY: " $filename 
    Move-Item $File "C:\Users\Me\Documents\Test\Executed" 
} 
} 
catch { 
Write-Host -ForegroundColor RED "FAILED TO EXECUTE: " $filename 
} 

Чтобы избежать путаницы, я передал все успешно исполняемые файлы на отдельной папке. Поэтому все неисполненные и не выполненные скрипты будут оставлены в основной папке.

1

Он будет основан на запросах, которые у вас есть в текстовых файлах. Если у них есть терминатор транзакций GO, то вы ограничены использованием SMO для этого, потому что клиент .NET System.Data.SqlClient не примет эту команду как хороший синтаксис. Это строго ограничитель для SSMS, а не истинный синтаксис SQL.

Я на самом деле был запрос для клиента, чтобы справиться с GO, так что вы могли бы сделать что-то вроде этого:

$dbServer = MyServer 
$ScriptDirectory = 'C:\scripts' 
Import-Module SQLPS 
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server $dbServer 

try { 
$file = dir $ScriptDirectory 
foreach ($f in $file) { 
    $s = Get-Content $f -Raw 
    $srv.ConnectionContext.ExecuteNonQuery($s); 
} 
} 
catch { 
$error[0].Exception 
} 

Если вы не имеете дело с GO заявление и хотите использовать .NET способ you can check out an article published on SQLShack. В нем рассказывается, как установить соединение и выполнить его, а также немного коснуться использования PS с SQL Server.

Смежные вопросы