1

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% 确定DateTable1 中列的数据类型设置为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”填充缺失的列)有效......

有谁知道如何解决这个问题?

非常感谢您!

4

2 回答 2

3

不确定是什么问题...

SELECT '1' A, '2' B, GETDATE() C
UNION ALL
SELECT '1', '2', NULL

退货

| 一个 | 乙| C |
--------------------------------------
| 1 | 2 | 2013 年 3 月 8 日 16:34:31+0000 |
| 1 | 2 | (空) |

你试过CAST你的NULL吗?

于 2013-03-08T16:35:14.950 回答
1

你已经发布的工作正常。

SELECT 'Frank' As 'Name', 'Grimes' as 'Name2', GETDATE() as 'TheDate'
UNION ALL
SELECT 'Jim' As 'Name', 'Bloggs' as 'Name2', null as 'TheDate'
于 2013-03-08T16:39:06.273 回答