【发布时间】:2021-06-30 09:44:55
【问题描述】:
我正在尝试对两个大表(超过 600 列)执行联合。两个表中的所有变量都应该具有相同的格式,但它们是由两个不同的团队分别准备的。
SELECT * into #FINAL_TABLE
from
(select * from Table1
UNION
select * FROM Table2 ) as tmp
我收到一个错误,其中包含有关数据类型错误信息的一列:
消息 8114,第 16 层,状态 5,600 号线
将数据类型 nvarchar 转换为数值时出错。
基于那个我不能说的错误:
- 哪一列导致错误?
- 是否还有其他列也会导致不匹配错误?
是否有更有效的方法来识别导致日期类型不匹配错误的所有列,然后逐列检查?
【问题讨论】:
-
你好。有几点需要说明:(1) 表中有 600 列的数据库未规范化,(2) 除非在非常特殊的情况下,否则永远不要编写
SELECT *查询,这不是一个,(3 ) 确保将数据放入具有适当数据类型的列中(INT 列中的整数,DATE 列中的日期等)。 -
如果合并表,列的顺序也必须相同(建议不要使用
*的另一个原因)。您可以使用INFORMATION_SCHEMA.COLUMNS系统视图来比较列数据类型和顺序。 -
@TT。谢谢你的评论。 (1) 我无法更改,下一步是将该表导出为 CSV 并将其导入特定软件。 (2)。有道理。 (3)。好的,但这仍然是逐列解决方案。
-
旁白:
Union将删除重复的行,但会降低性能。如果不需要,即您知道没有重复项,则使用union all。
标签: sql sql-server tsql