使用ISNULL时,您可能会返回2种不同的类型

时间:2014-01-24 21:24:04

标签: sql-server isnull

给出以下示例:

declare @t1 AS VARCHAR(10)
SET @t1 = 'asdf'

SELECT ISNULL(@t1, 0) AS test1

现在如果@ t1为NULL,对ISNULL的调用将返回0,这是一个INT。

那么这意味着您有两种潜在的数据类型可以返回相同的列吗?

1 个答案:

答案 0 :(得分:1)

这样可以正常工作Sql server是隐式转换并将0转换为字符串'0',因为要返回的列的数据类型。

DECLARE @Test_TABLE TABLE(Column1 VARCHAR(10))
INSERT INTO @Test_TABLE VALUES
('ALPHA'),(NULL),('Beta'),('Gemma')

SELECT ISNULL(Column1, 0)
FROM @Test_TABLE

这会抛出一个错误,因为当sql server尝试转换为INT的列的数据类型时,它会失败并且会抛出错误

DECLARE @Test_TABLE1 TABLE(Column1 INT)
INSERT INTO @Test_TABLE1 VALUES
(1),(NULL),(2),(3)

SELECT ISNULL(Column1, 'Is null')
FROM @Test_TABLE1
  

消息245,级别16,状态1,行5转换时转换失败   varchar值'Is null'到数据类型int。

您可以看到一种数据类型优先于其他数据类型且仅返回一种数据类型而不是两种:)