在过去的一个小时里,我在网上寻找了适合我情况的答案,但没有一个能解决我的问题。我正在尝试查询 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
最佳答案
在将结果集推送到文件时,bcp 一直对我有用,所以据我所知,这很好。
这里更大的问题是如何格式化 @logtext
查询字符串;您需要通过在其前面添加第二个单引号来转义单引号。以下是您遇到的几个问题点:
WHERE category = 'L-FAIL-MSG'
和
AND ''value'' != ' '
在第一个实例中,您给它一个字符串,然后是一个文字,然后是另一个字符串,没有任何格式。 您需要添加第二个引号来转义它并将 L-FAIL-MSG 视为字符串文字,或者将 L-FAIL-MESSAGE 设为变量将其推送到字符串。
第二个实例会给您带来问题,因为您再次没有转义引号 - 它似乎是一个字符串,后跟另一个字符串,没有任何运算符来连接它们或任何内容。
以下是可能需要格式化的方式
WHERE category = ''L-FAIL-MSG''
和
AND ''value'' != '' ''
关于mysql - 将 SQL 查询结果从 Microsoft Visual Studio 导出到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44143711/