2013-05-28 66 views
0

我正在使用以下代碼嘗試使用Log Parser來啓動並轉儲我已經存入SQL數據庫的.csv文件的內容。我不得不嘗試使用自定義函數去除非字母數字字符,以便可以動態創建列,因爲最終目標是讓我可以使用任何.csv文件。使用啓動過程啓動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()來獲取可寫入的新臨時文件的名稱。 –