SQL 服务器:无法将列输出到 varchar

SQL Server : cannot get columns to output to varchar

我遇到了一个奇怪的问题。我将 uidui2 列组合成 key 列。大多数情况下,uid 是字母数字组合,我没有任何问题。

然而这组数据的uid都是数字:

输入数据:

+-------+-------+
| uid   | uid2  |
+-------+-------+
| 12345 | 98765 |
| 45645 | NULL  |
+-------+-------+

输出应该是这样的:

+-------+-------+------------+
| uid   | uid2  | key        |
+-------+-------+------------+
| 12345 | 98765 | 1234598765 |
| 45645 | NULL  | 45645      |
+-------+-------+------------+

如果 uid 不是 NULL 那么它很好,但是,如果它是 NULL,那么它会在 uid 的末尾添加一个 0。所以 uid=45645 我最终得到 456540

当我合并两列时,我使用了CAST AS varchar(255)

我也试过 CAST 整个结果。都没有用。

这是我的代码:

SELECT 
    [uid] AS [id], 
    [uid2] AS [id2], 
    (CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255))) AS [key], 
    (CAST(CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255)) AS varchar(255))) AS [key]
FROM 
    [test]

这就是输出:

+-------+-------+------------+------------+
| uid   | uid2  | key        | key        |
+-------+-------+------------+------------+
| 12345 | 98765 | 1234598765 | 1234598765 |
| 45645 | NULL  | 456450     | 456450     |
+-------+-------+------------+------------+

IIF是处理NULL的。否则它会使整个事物为空。如果我用 '-' 替换 ' ' 然后我得到

Error converting data type varchar to float

这让我觉得即使所有内容都转换为 varchar,它仍然是数字。

作为解决方法,如果 uid2 为 NULL,我可能会从键中删除最后一个 0,但这有点 'hacky',我真的很想知道这里发生了什么。

我认为问题在于 SQL 服务器正在尝试转换为 int,因为您有 +。我认为您只想像下面这样使用 CONCAT:

select CONCAT(uid, uid2) as key