正在将 SQL 查询结果从 Microsoft Visual Studio 导出到文本文件
Exporting SQL Query Results to Text File From Microsoft Visual Studio
过去一个小时我一直在网上寻找适合我的情况的答案,但 none 已经解决了我的问题。我正在尝试查询 MySQL 数据库(我已成功完成),然后将结果输出到文本文件。
我读到使用 bcp 和 "queryout" 是实现此目标的最佳方法。我的代码在下面,但它继续给我以下错误:"Incorrect Syntax Near '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'' != '' ''
过去一个小时我一直在网上寻找适合我的情况的答案,但 none 已经解决了我的问题。我正在尝试查询 MySQL 数据库(我已成功完成),然后将结果输出到文本文件。
我读到使用 bcp 和 "queryout" 是实现此目标的最佳方法。我的代码在下面,但它继续给我以下错误:"Incorrect Syntax Near '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'' != '' ''