Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа уникальными значениями [D7, IB6.x, MSSQL]


Страницы:   1 2 3 4

den_777 ©   (2004-05-24 09:46:00) 

Пока мне приходилось работать только с INFORMIX и IB,FB. Поэтому приведу пример на этих базах.
Надо чтобы была возможность автоматической и ручной вставки значения в поле которое является PRIMARY KEY, т.е. для таблицы с полями ID и CNAME проходили оба SQL insert into tbl1(id,cname) values(0,"myname") и insert into tbl1(cname) values("myname")
Соответственно в INFORMIX я просто задаю этому полю тип SERIAL и все, больше ничего делать не надо. В первом случае INFORMIX просто проверяет не противоречит ли вставляемое мной значение уникальности и если нет то вставляет его во втором случае сам генерит следующее значение.
В IB,FB это решается с помощью генератора и триггера IF NEW.ID IS NULL THEN NEW.ID=GEN_ID(MY_GEN,1).
Вопрос как таких же действий добиться от MSSQL. И вопрос в догонку, если в других базах какой-либо функционал был заложен в триггер перед вставкой, то как этот же функционал реализовать в MSSQL.


ega23   (2004-05-24 09:50:00) [61]

И вопрос в догонку, если в других базах какой-либо функционал был заложен в триггер перед вставкой, то как этот же функционал реализовать в MSSQL.

Точно так же, как и в других СУБД.
CREATE TRIGGER trigger_name
ON table
[WITH ENCRYPTION]
{
   {FOR { [DELETE] [,] [INSERT] [,] [UPDATE] }
       [WITH APPEND]
       [NOT FOR REPLICATION]
       AS
           sql_statement [...n]
   }
   |
   {FOR { [INSERT] [,] [UPDATE] }
       [WITH APPEND]
       [NOT FOR REPLICATION]
       AS
       {    IF UPDATE (column)
           [{AND | OR} UPDATE (column)]
               [...n]
           | IF (COLUMNS_UPDATED() {bitwise_operator} updated_bitmask)
               { comparison_operator} column_bitmask [...n]
       }
           sql_statement [ ...n]
   }
}

SQL insert into tbl1(id,cname) values(0,"myname") и insert into tbl1(cname) values("myname")

Боюсь, что здесь всё так просто не получится. Это через процедуру делать придётся, ИМХО по другому - никак.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо