2017-05-23 94 views
0

我在網上查找過去一小時以找到特定於我的情況的答案,但沒有一個解決了我的問題。我試圖查詢MySQL數據庫(我已經成功完成),然後將結果輸出到文本文件。將SQL查詢結果導出到來自Microsoft Visual Studio的文本文件

我讀過使用bcp和「queryout」是實現此目標的最佳方法。我的代碼如下,但它繼續給我以下錯誤:「靠近'L'的語法不正確。」

我該如何解決這個問題?有沒有更簡單的方法將我的結果從Visual Studio導出到文本文件?

set @logtext = 
'" 
SELECT category, occurTime, sourceKeyName, recipe, "value", formulaName, startTime, endTime , BatchID 


FROM dbo.Batch 
LEFT JOIN dbo.BatchHeader ON Batch.uniqueBatchID = BatchHeader.uniqueBatchID 
LEFT JOIN dbo.RecipeHeader ON BatchHeader.uniqueBatchID = RecipeHeader.uniqueBatchID 
LEFT JOIN dbo.BReportEvent ON RecipeHeader.uniqueBatchID = BReportEvent.uniqueBatchID 
LEFT JOIN dbo.RecipeFormula ON BReportEvent.uniqueBatchID = RecipeFormula.uniqueBatchID 

WHERE category = 'L-FAIL-MSG' 

AND occurTime >= DATEADD(day, -1, GETDATE()) 
AND "value" != ' ' 
"' 

DECLARE @logtext varchar(1000) 
DECLARE @cmd varchar(2000) 

SET @cmd = 'bcp ' + @logtext + ' queryout "C:\Users\anduaguibe\Documents\Visual Studio 2017\Projects\HelloWorld\HelloWorld\upstreamData.txt" -U uID -P uPass -c' 

EXEC master...XP_CMDSHELL @cmd 
+0

錯誤說它。建議你在L-FAIL-MSG周圍做兩個單引號,這樣''L-FAIL-MSG''(這些不是雙引號,它們是2個單引號)。看起來他們也可能是其中的其他問題。 – GandRalph

回答

0

BCP一直爲我工作,當推結果集到一個文件,所以這是很好的,據我所看到的。

這裏面臨的更大問題是如何格式化@logtext查詢字符串;您需要在單引號之前添加第二個引號。這裏有幾個問題點的給你:

WHERE category = 'L-FAIL-MSG' 

AND ''value'' != ' ' 

在第一種情況下,你給它一個字符串,然後文字,然後另一個字符串,不帶任何格式。 您需要可以添加第二個引號,以逃避它和治療L-FAIL-MSG作爲一個字符串字面量,或使L-FAIL-MESSAGE變量推到這一點的字符串。

二審會給你一個問題,因爲你又沒有逃脫它 - 經濟通似乎是一個字符串,然後另一個字符串沒有任何運營商將它們串聯或任何東西。

下面是它可能需要格式化

WHERE category = ''L-FAIL-MSG'' 

AND ''value'' != '' ''