背景资料:
我有一个填充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
关于我如何解决这个问题的任何想法。对此有点困惑。感谢。
答案 0 :(得分:3)
如果我正确理解你的问题(我很可能不会),我想你想要:
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
临时表中的一些示例行以及您希望从查询中获得的输出,以便人们可以帮助你。
顺便说一句,使用status
或count
等SQL保留关键字作为列名或别名并不是一种好习惯,但如果必须,我建议附上它们在括号中(即[status]
)以便于阅读(特别是在SSMS或任何带有SQL语法高亮或颜色编码的IDE中),如上所述。