背景信息:
我有一个正在填充 SSRS 报告的存储过程。 SSRS 报告将运行并导出为 CSV。然后将其作为文本文件打开并通过第 3 方供应商应用程序运行。
教科书的输出应如下所示:
lid, status, i_flag,Count, pDate, iDate
62558633,"Text Value","08/16",11,"08/16","08/16"
78013526,"Text Value","",,"08/16""08/16"
我的结果如下所示:
lid, status, i_flag,Count,pDate,iDate
19007442,"'Dir,MgmtII'",'',2,'','02/16'
17343623,'Text','',0,'11/15','02/16'
现在我使用的代码是:
SELECT
quotename(isnull(i_flag,''''), '''') as i_flag,
isnull(lid, 0) as lid,
quotename(isnull(status,''''), '''') as status,
isnull(Count, 0) as Count,
quotename(isnull(p_Date,''''), '''') as p_Date,
quotename(isnull(i_Date,''''), '''') as i_Date
FROM
#Table
关于如何解决这个问题的任何想法。被这个问题困扰了一段时间。谢谢。
最佳答案
如果我正确理解你的问题(我很可能没有),我认为你想要:
SELECT
QUOTENAME(ISNULL(i_flag,''), '"') AS i_flag,
ISNULL(lid, 0) AS lid,
QUOTENAME(ISNULL([status],''), '"') AS [status],
ISNULL([Count], 0) AS [Count],
QUOTENAME(ISNULL(p_Date,''), '"') AS p_Date,
QUOTENAME(ISNULL(i_Date,''), '"') AS i_Date
FROM
#Table
听起来您在字段中有一些值需要用双引号括起来 "
以便导出到 CSV,而且在某些情况下这些字段中的值可能为 NULL。
我上面的建议通过首先使用 ISNULL
将任何 NULL 值替换为空字符串,然后使用 QUOTENAME
将结果值括在双引号中来处理此问题。
与您发布的代码的关键区别是:
- 使用
ISNULL
时,我将 NULL 替换为空字符串''
,而不是包含单引号字符的字符串''''
(字符串中两个连续的单引号表示转义的文字单引号字符) - 当使用
QUOTENAME
将值括在双引号中时,我在第二个参数中指定包含双引号'"'
的字符串,而不是包含单引号字符''''
.
我希望这对您有帮助 - 如果您仍然遇到问题,也许您可以提供 #Table
临时表中的一些示例行以及您期望从查询中获得的输出,以便人们可以进一步帮助您。
顺便说一句,使用 SQL 保留关键字(如 status
或 count
)作为列名或别名并不是一个好习惯,但如果必须的话,我建议将其括起来将它们放在方括号中(即 [status]
)以提高可读性(特别是在 SSMS 或任何具有 SQL 语法突出显示或颜色编码的 IDE 中),正如我上面所做的那样。
关于sql - 如何在 SQL Server 中正确实现 quotename?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410085/