2013-05-28 7 views
0

Я использую следующий код, чтобы попытаться использовать Log Parser для запуска и сброса содержимого CSV-файла, который у меня есть, в базу данных SQL. Я должен попытаться использовать пользовательскую функцию для выделения не буквенно-цифровых символов, чтобы столбцы можно было создавать динамически, потому что конечной целью является выполнение этой работы с любым CSV-файлом, который я ему даю.Использование Start-process для запуска процесса LogParser, возникла ошибка

Вот код:

start-process -NoNewWindow -FilePath "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -ArgumentList @" 

"Create Function [dbo].[RemoveNonAlphaNumCharacters](@Temp VarChar(1000)) 
Returns VarChar(1000) 
AS 
Begin 

    Declare @KeepValues as varchar(50) = '%[^a-z0-9]%' 
    While PatIndex(@KeepValues, @Temp) > 0 
     Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '') 

    Return @Temp 
End 
SELECT.RemoveNonAlphaNumCharacters * INTO SQLCounters FROM C:\Users\SeanLon\Desktop\SQL_Log_0.csv" -i:CSV -o:SQL -server:MJNHNX4 -database:PerfmonCounters -driver:"SQL Server" -createTable:ON 

"@ 

И ошибка:

start-process : Process with an Id of 221104 is not running. 
At C:\Users\seanlon\Desktop\Performance\Powershell examples\LogParser.ps1:1 char:1 
+ start-process -NoNewWindow -FilePath "C:\Program Files (x86)\Log Parser 2.2\LogP ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Start-Process], ArgumentException 
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.StartProcessCommand 

может запустить процесс или парсер логов просто не справиться с этим комплексом SQL в списке аргументов? Или процесс LogParser закрывается раньше, чем что-то происходит?

ответ

1

На PowerShell 3.0, похоже, что он передает параметры в чистоту. Однако, чтобы упростить это можно поставить SQL в файле foo.sql, а затем вызвать LogParser так:

$logParser = "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" 
& $logParser file:c:\foo.sql -i:CSV -o:SQL -server:MJNHNX4 -database:PerfmonCounters -driver:"SQL Server" -createTable:ON 
+0

Я дам этот снимок и посмотрю, позволяет ли он мне полностью отключить весь процесс. Это может просто захлебываться от форматирования. Конечно, ссылка на другой файл означает, что если я когда-либо сделаю это с другой рабочей станции, мне пришлось бы запомнить, как изменить каталог c: \ foo.sql или поместить каталог в параметр. Это незначительная досада. –

+0

Это место для начала, если вышеописанное работает, тогда оно дает вам представление о том, где он терпит неудачу, и, возможно, вы могли бы заглянуть в строку SQL дальше. Если он по-прежнему не работает, возможно, это еще один параметр, который не прав или его перехват PowerShell. Что касается файла, используйте [io.path] :: GetTempFileName(), чтобы получить имя нового файла temp, в который вы можете написать. –

0

LogParser ничего не знает о базе данных, он интерпретирует и выполняет простые запросы SQL в своем внутреннем двигателе, который не обрабатывает хранимые процедуры. Также см. Logparser not recognizing SQL command.

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

  • Нет связанных вопросов^_^