【发布时间】:2013-03-08 16:31:45
【问题描述】:
在使用UNION ALL 并且必须填充一个表(由UNION 命令连接的表)时,我遇到了 SQL Server (T-SQL) 的一种奇怪行为。
表 1:
Firstname Lastname Date
--------- -------- ----
Peter Pan 2013-01-21 12:29:55.000
Paul Am 2013-01-22 12:39:45.000
和表 2:
FN LN
--------- --------
Laura Loeb
Lisa Lefteye
我想对两个表都做一个UNION ALL。这只能通过使用“假”第三列“填充”表 2 来实现(因为它没有“数据”列),如下所示:
SELECT
Firstname AS FName, Lastname AS LName, Date AS TheDate
FROM Table1
UNION ALL
SELECT
FN AS FName, LN AS LName, NULL AS TheDate
FROM Table2
我的问题是:SQL Server 给我一条错误消息,告诉我它不能转换为 DateTime 类型。
我 100% 确定表 1 中列 Date 的数据类型设置为 DateTime,也允许使用 NULL 值。
我尝试过设置一个虚拟日期,如下所示:
... FN AS FName, LN AS LName, '2013-03-08' AS TheDate ...
我尝试过设置当前日期,如下所示:
... FN AS FName, LN AS LName, getdate() AS TheDate ...
以上都不起作用。
但是,我知道一般的解决方案(使用“NULL AS Columnname”填充缺失的列)有效...
有人知道如何解决这个问题吗?
非常感谢您!
【问题讨论】:
-
只有当我尝试用 NULL 或虚拟日期或 getdate() 填充 DateTime 类型的列时才会发生这种情况。如果我尝试填充 vchar 或 bit 类型的列,一切正常...
-
非常感谢,花了半天的时间试图找到错误后,我发现了:我不知道使用UNION ALL时SELECTed Columns必须处于相同的顺序.
标签: sql-server datetime casting union union-all