首页 > 解决方案 > 选择计数时在字符串上将 varchar 转换为 int 的 SQL 错误

问题描述

我有一个 SQL 查询,用于创建一个文本文件,其中包含标题行、详细信息行,最后是带有“已选择 X 行”消息的行。因为它是用于使用大写 cedilla 作为分隔符的报告,所以我选择整个标题行作为单个字符串(用省略号截断以节省空间):

SELECT 
       'REC_TYPE'+CHAR(199)+'PLAN_ID'+CHAR(199)+...+'DATE_ANSWERED'
UNION ALL

SELECT  REC_TYPE+CHAR(199)+
        PLAN_ID+CHAR(199)+
        ...+
        Convert(char(10),DATE_ANSWERED,101)

FROM
       #My_Temp_Table  

UNION ALL

SELECT COUNT(*) + 'rows selected'

FROM
       #My_Temp_Table

如果我不包括通过 SQL 代码的行数,那么整个事情都可以正常工作。但是,由于某种原因,通过联合添加行计数行会导致查询引发转换错误:

Conversion failed when converting the varchar value 'REC_TYPEÇPLAN_IDÇ...DATE_ANSWERED' to data type int.

我可以对行计数部分做些什么来防止该错误?

标签: sql-servertype-conversionintvarchar

解决方案


因为 COUNT 返回一个 int,然后您尝试将其添加到字符串中。由于数据类型优先,所有内容都将尝试转换为 int。

只需将您的最后一个查询更改为这样的内容。

SELECT convert(varchar(10), COUNT(*)) + 'rows selected'

推荐阅读