以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  sql加isnull判断查询为何出错?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=183410)

--  作者:happyft
--  发布时间:2022/11/3 23:24:00
--  sql加isnull判断查询为何出错?
SELECT TOP 500
    ISNULL(事业部名称, \'空值\') AS 事业部名称,
    ISNULL(客户, \'空值\') AS 客户
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY 事业部名称,
                               客户
                          ) AS RowNum
    FROM
    (
        SELECT DISTINCT 事业部名称,
            客户
        FROM uv_dd_NotOutOLD10
        WHERE 交货日期 >= \'2022-11-01\'
    ) x
) y
WHERE RowNum > 0

上面的语句红色那部分会提示错误,消息 245,级别 16,状态 1,第 2 行
在将 varchar 值 \'空值\' 转换成数据类型 int 时失败。

第一句不用isnull判断就不会出错,会是什么原因呢?

谢谢!


--  作者:有点蓝
--  发布时间:2022/11/4 8:53:00
--  
如果列是整数类型,不能使用字符的:ISNULL(事业部名称, -1) AS 事业部名称,
--  作者:HappyFt
--  发布时间:2022/11/4 9:39:00
--  
谢谢,原来是定义值为null的列名时也必须要定义数据类型
要用 CAST(NULL AS NVARCHAR(16)) AS 事业部名称 ,不能直接用NUll as 事业部名称