Путать из-за оператора SQL для CASE WHEN внутри INSERT - PullRequest
3 голосов
/ 12 ноября 2011

У меня есть следующий оператор SQL (предназначенный для SQL Server):

INSERT INTO t1 (c1, c2) 
VALUES (1, CASE WHEN (SELECT MAX(c2) FROM t1 AS maxV) IS NOT NULL THEN maxV+1 ELSE 1 END);

Я получаю сообщение об ошибке: «Неверное имя столбца 'maxV'"

Почему?

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Попробуйте использовать COALESCE:

INSERT INTO t1 (c1, c2) 
SELECT 1, COALESCE(MAX(c2), 0) + 1
FROM t1
1 голос
/ 12 ноября 2011

Еще один способ сделать это ...

INSERT INTO t1 (c1, c2) 
VALUES (1, ISNULL(SELECT MAX(c2) FROM t1, 0)+1);
1 голос
/ 12 ноября 2011

Попробуйте это ...

INSERT INTO t1 (c1, c2) 
VALUES (
    1, 
    CASE 
        WHEN (SELECT MAX(c2) FROM t1) IS NOT NULL 
        THEN (SELECT MAX(c2)+1 FROM t1)
        ELSE 1 
    END);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...