将访问SQL转换为SQL Server

时间:2014-08-27 08:40:39

标签: sql sql-server sql-server-2012

我正在尝试将此查询从Microsoft访问转换为 SQL Server 2012

SELECT
IIF(IsNull(Letter), '', CalculationType)  AS [BF NI Calculation Basis]
FROM NICs

我将它转换为以下内容,但我一直收到错误:

  

Msg 245,Level 16,State 1,Line 1转换时转换失败   varchar值' A'数据类型int。

这就是我的尝试:

SELECT 
CHOOSE(ISNULL(Letter,0), '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs

SELECT
IIF(Letter = 0, '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs

4 个答案:

答案 0 :(得分:1)

根据此MSDN link for IIF

true_value false_value 中的类型返回优先级最高的数据类型。它表示在您的查询中,true_value是''(字符串),false_value是CalculationType(它是int),这就是您收到此错误的原因。

所以你的查询应该是这样的。

SELECT
IIF(Letter = '0', 0, CalculationType) AS [BF NI Calculation Basis]
FROM NICs

答案 1 :(得分:1)

如果要检查Letter是否为空而不是写:

SELECT
IIF(Letter IS NULL, '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs

如果您想检查字母值0

SELECT
IIF(Letter ='0', '', CalculationType) AS [BF NI Calculation Basis]
FROM NICs

答案 2 :(得分:1)

我认为这是您正在寻找的查询:

SELECT CASE
        WHEN Letter IS NULL THEN ''
        ELSE CAST(CalculationType AS NVARCHAR(MAX)
    END AS [BF NI Calculation Basis]
FROM NICs

这是[BF NI计算基础]列为NVARCHAR的解决方案。

希望这会有所帮助。

答案 3 :(得分:0)

这就是你需要的吗?

SELECT
CASE
WHEN (ISNULL(Letter,0)) = '' THEN CalculationType ELSE ISNULL(Letter,0) 
END AS [BF NI Calculation Basis]
FROM NICs

看看这个:

create table #NICs
(
    Letter int,
    CalculationType int
)

insert into #NICs values (1,100)
insert into #NICs values (null,200)
insert into #NICs values ('',300)


SELECT
CASE
WHEN (ISNULL(Letter,0)) = '' THEN CalculationType ELSE ISNULL(Letter,0) 
END AS [BF NI Calculation Basis]
FROM #NICs

drop table #NICs

编辑:

SELECT
CASE
WHEN (ISNULL(try_parse(Letter as int),0)) = '' THEN CalculationType ELSE ISNULL(try_parse(Letter as int),0) 
END AS [BF NI Calculation Basis]
FROM #NICs