Как создать таблицу с вычисляемым столбцом и оператором if? - PullRequest
0 голосов
/ 08 мая 2020

Как указано в заголовке, я пытаюсь создать таблицу на SQL сервере, которая включает вычисляемый столбец с оператором if. Я уже создал базовые c столбцы, и в настоящее время пытаюсь добавить вычисляемый столбец с помощью ALTER TABLE.

Оператор In: ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50,[Zmiana_1]) float; Я получил ошибку Неправильный синтаксис рядом с 'float'. Я перепробовал множество комбинаций, всегда получаю ошибки. Типы данных: Zmiana_postoj_1 - бит, Zmiana_1 - int. Кто-нибудь знает, как это правильно написать? Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Избавьтесь от float - SQL Сервер будет выводить тип данных из типа данных выражения.

Если вы замените -50 на -5E1 или -50e0 тип данных выражение превратится в float

ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50e0,[Zmiana_1]);

, хотя вы, возможно, предпочтете более подробно об этом.

Лично я предпочитаю краткость IIF вместо CASE WHEN ELSE END. Я сомневаюсь, что синтаксис вычисляемого столбца можно перенести на другие СУБД независимо от этого.

0 голосов
/ 08 мая 2020

В SQL Server вы должны использовать:

alter table zgodnosc add proba as (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end) ;

Тип не требуется. В дополнительных скобках нет необходимости. Я обычно включаю их по двум причинам. Во-первых, они нужны для check ограничений. Во-вторых, они хорошо справляются с визуальным ограничением выражения.

Если вам нужен конкретный тип, вы можете преобразовать / преобразовать:

alter table zgodnosc add proba as (convert(float, (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end))

Примечание: я настоятельно не рекомендую использовать IIF(). Он был введен в SQL Server для обратной совместимости с MS Access. CASE - стандартный метод обработки условных логарифмов c в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...