我已经在网上寻找过去一小时找到特定于我的情况的答案,但没有一个能解决我的问题。我正在尝试查询MySQL数据库(我已成功完成),然后将结果输出到文本文件。
我已经读过使用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 :(得分:0)
在将结果集推送到文件时,bcp始终对我有用,所以我认为这很好。
这里更大的问题是您如何格式化@logtext
查询字符串;你需要通过在它之前添加第二个来逃避单引号。以下是一些问题点:
WHERE category = 'L-FAIL-MSG'
和
AND ''value'' != ' '
在第一个例子中,你给它一个字符串,然后是一个文字,然后是另一个字符串,没有任何格式。
您需要添加第二个引号以对其进行转义,并将L-FAIL-MSG
视为字符串文字,或者将L-FAIL-MESSAGE
变为推送到字符串中的变量。
第二个实例会给你一个问题,因为你再次没有转义引号 - 它似乎是一个字符串后跟另一个字符串而没有任何操作符连接它们或任何东西。
这里可能需要格式化
WHERE category = ''L-FAIL-MSG''
和
AND ''value'' != '' ''