Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2011, 17:01   #1
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию Вставка последоватльеных записей в заполненную таблицу

Здравствуйте!
Вопрос следующего порядка.
Имеется таблица CHILD с темя полями ID, OWNER_ID, NUMBER
где
id - целочисленное ключевое
OWNER_ID - ID вышестоящей таблицы (связка с 1:N)
NUMBER - целочисленный номер
Таблица отражает число рубильников в трансформаторной подстанции. Вышестоящая таблица - таблица подстанций.
-------
Данные поступили таким образом, что у меня имеются куча линий с ИД начала и ИД конца. То есть:
ИД трансформ начальн.--- ЛИНИЯ (описание) - ИД трансформ конечн.
При загрузке первой "пачки" (ИД трансформ начальн) в таблицу CHILD вносятся 0 или N записей например:
тр 1 1
тр 1 2
тр 1 3
тр 3 1
тр 3 2
.....
обратите внимание !!! тр 2 в первой загрузке отсуствует.
------------
Проблема:
при второй загрузке пишется несколько тысяч скриптов вот такого содержания:
Код:
INSERT INTO eFEEDER(ID_LINE,ID_TRANSFORMER,glTYPE,NUMBER) SELECT 509,1,16,MAX(NUMBER)+1 FROM eFEEDER WHERE ID_TRANSFORMER=1;

INSERT INTO eFEEDER(ID_LINE,ID_TRANSFORMER,glTYPE,NUMBER) SELECT 488,1,16,MAX(NUMBER)+1 FROM eFEEDER WHERE ID_TRANSFORMER=1;

INSERT INTO eFEEDER(ID_LINE,ID_TRANSFORMER,glTYPE,NUMBER) SELECT 489,1,16,MAX(NUMBER)+1 FROM eFEEDER WHERE ID_TRANSFORMER=1;
....
и.т.п
Дело в том, что для случая выше, с тр 1 и тр 3 всё срабатывает, а если появляется тр 2, то результат
Код:
SELECT 489,1,16,MAX(NUMBER)+1 FROM eFEEDER WHERE ID_TRANSFORMER=2
= 489, 1 ,16 ,null
----
Как написать условие вставки , если SELECT MAX(NUMBER) = NULL вставить 1 в противном случае MAX(NUMBER) +1 ?

П.С. работа в MS SQL Servere 2005
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 15.10.2011, 18:50   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

MAX(COALESCE(NUMBER,0))+1
или
COALESCE(MAX(NUMBER),0)+1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка строк в таблицу АННА-ЕАО Microsoft Office Excel 2 25.08.2011 09:21
Вставка данных в таблицу. Kveldulv Microsoft Office Access 2 25.05.2010 10:27
Вставка записей в БД. MySQL artemavd PHP 10 14.09.2009 19:21
Вставка картинки в таблицу sabina_smile Помощь студентам 7 18.10.2007 16:29
добавление записей в таблицу strannik БД в Delphi 5 10.05.2007 08:12