以百分比表示的tsql格式

以百分比表示的tsql格式,tsql,Tsql,我有以下sql语句: SELECT 1, 2, 3 UNION ALL SELECT CAST(1 AS VARCHAR) + '%',CAST(2 AS VARCHAR) + '%',CAST(3 AS VARCHAR) + '%' 我得到了以下错误: Conversion failed when converting the varchar value '1%' to data type int. 我可以将第一个select语句更改为'1','2','3',但我有许多联合,只有一行必

我有以下sql语句:

SELECT 1, 2, 3

UNION ALL

SELECT CAST(1 AS VARCHAR) + '%',CAST(2 AS VARCHAR) + '%',CAST(3 AS VARCHAR) + '%'
我得到了以下错误:

Conversion failed when converting the varchar value '1%' to data type int.
我可以将第一个select语句更改为'1','2','3',但我有许多联合,只有一行必须使用百分比格式。是否有其他可用的替代方案


谢谢

你需要投下所有的工会条款

具有的最终输出中的每一行都具有
int
高于
varchar
,因此
1%
被强制转换为int,结果非常明显

select cast(1 as varchar), cast(2 as varchar), cast(3 as varchar)
union all
select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'
或者:一列中不能有不同的数据类型/格式

当然这是一个例子,但是混合整数和格式化浮点是没有意义的,即使SQL确实允许这样做

select cast(1 as varchar) ,cast(2 as varchar), cast(3 as varchar)

union all

select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'
错误的原因是您在上面选择了1,2,3,这是一个整数值,并且您正在使用varchar值进行并集

所以,解决方案是您需要将上面的select数据类型转换为varchar

第二个解决方案是

Select cast(col1 as varchar),cast(col2 as varchar),........... from
(
   .. all your union large query you have writting
) d

union all
select cast(1 as varchar) + '%',cast(2 as varchar) + '%',cast(3 as varchar) + '%'

感谢Pranay,我实际上是在寻找一种替代方法,我有一个包含大量联合的大型查询,所以我不想只更改一个百分比行的所有联合。@campo-你在子查询上写,然后做我给你的另一种选择啊,好的,我只看到了你的原始答案,没有替代方法,不是您添加到的已编辑版本。谢谢,第二个解决方案非常适合我的需要!您能解释一下为什么要这样混合数据吗请+1谢谢您解释了最高优先级的数据类型,我不知道SQL server是如何确定列的数据类型的。