2014-08-27 4 views
1

Я пытаюсь преобразовать этот запрос из Microsoft в SQL Server 2012.Преобразование доступа SQL к SQL-серверу

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

я преобразовал его в follwing, но я получаю сообщение об ошибке:

Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'A' to data type 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 
+0

Каков тип данных CalculationType? –

+0

@ KrishnrajRana is Int – user3734454

+0

Проверьте мой ответ ... –

ответ

1

Если вы хотите проверить, если письмо является NULL, чем пишут:

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 
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 
+0

Я все равно получаю такое же сообщение об ошибке 245, когда я это пробую. – user3734454

+0

Редактировать. попробуй это. – sdrzymala

1

Согласно этому MSDN link for IIF

Возвращает тип данных с наивысшим приоритетом из типов в true_value и false_value. это означает, что в вашем запросе true_value есть '' (string), а false_value - CalculationType (который является int), и именно по этой причине вы получаете эту ошибку.

Так что ваш запрос должен понравиться.

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

Я думаю, что это запрос Вы искали:

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

Это решение wi й столбец [BF NI Calculation Basis] как NVARCHAR.

Надеюсь, это поможет.

Смежные вопросы