我无法搞清楚这句话。似乎SQL Server仍然在THEN
语句中执行CASE WHEN
部分。请参阅此查询。
SELECT
CASE
WHEN ISNUMERIC('INC') = 1
THEN CAST('INC' as numeric(10,2))
ELSE 'FALSE'
END AS foo
SQL Server正在返回
“将数据类型varchar转换为数字”
时出错
从此查询中,它应返回FALSE
并且不会返回错误,因为THEN
部分未执行。
我的查询有什么问题?
答案 0 :(得分:2)
问题是您从同一列返回两种不同的数据类型。所以试试这个 -
DECLARE @value CHAR(3)
SET @value = 66
SELECT
CASE WHEN ISNUMERIC(@value) = 1
THEN CAST(CAST(@value AS NUMERIC(10,2)) AS VARCHAR(30))
ELSE 'FALSE'
END AS foo
答案 1 :(得分:1)
这是因为,您的查询正在尝试
CAST 'FALSE' as Numeric(10,2)
试试这个
SELECT CASE WHEN ISNUMERIC('INC') = 1 THEN
CAST(CAST('INC' as numeric(10,2)) AS varchar(5))
ELSE 'FALSE' END AS foo
答案 2 :(得分:1)
问题是你CASE
个分支的一个分支返回VARCHAR
而另一个分支返回一个数字。
尝试以下方法:
CASE WHEN ISNUMERIC('INC') = 1
THEN CAST(CAST('INC' AS NUMERIC(10,2)) AS NVARCHAR)
ELSE 'FALSE'
END AS foo