【发布时间】:2019-09-09 09:28:09
【问题描述】:
我正在尝试找出为什么我的联合查询给我类型转换错误
我正在尝试创建一个必须以多个联合查询似乎是最简单的选择的方式格式化的报告。 本质上,我想要一个显示键列的输出,然后是每一列的一行,以及该列的值,所以它看起来像这样:
Key1 Column1 Value
Key1 Column2 Value
Key2 Column1 Value
Key2 Column2 Value
我正在为大约 40 列执行此操作,所以它有很多选择语句。
我所有的选择语句的结构都相同:
SELECT tb1.Key AS 'Key', 'Column1' AS 'Column', tb1.Column1 AS 'Value'
union
SELECT tb1.Key AS 'Key', 'Column2' AS 'Column', tb1.Column2 AS 'Value'
等
单独运行所有查询时我没有问题,但是当我尝试运行所有查询时,我遇到了将各种字符串转换为 int 类型的问题。
为了尝试纠正这个问题,我尝试将每个“值”列转换为 NVARCHAR,但我仍然收到一些字符串正试图转换为 int 类型的错误,但我不确定为什么会这样.
【问题讨论】:
-
问题在于查询本身和列类型,而不是
UNION。转换为nvarchar并不能解决任何问题,它试图掩盖实际问题,同时引入更严重的问题,如本地化问题——之后的日期是什么样的?数字?更糟糕的是,如果在视图中使用该查询,服务器将无法使用列上的任何索引 -
请发布实际查询和表架构。问题是列类型,而不是
UNION。您也在使用什么报告工具?也许最简单的方法就是让报表工具合并查询 -
PS
UNION执行昂贵的DISTINCT操作。如果您不想消除重复,请使用UNION ALL -
嗨@PanagiotisKanavos。该查询不会在视图中使用,所以我不必担心,它只需要以这种格式导出。列中没有日期,只有字符串和数字。我可能会误解 CAST 但如果我转换为 nvarchar 为什么它仍会尝试转换为 int?
-
简单的答案是因为你错过了一个演员,或者没有用错什么。除此之外,谁能猜到?
标签: sql sql-server type-conversion union