Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 29.02.2012
Сообщений: 21

Триггер на генерацию уникального ID

12.03.2012, 12:47. Показов 7275. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
прочитал много всякого но так и не разобрался что к чему....
SQL
1
2
3
4
5
6
CREATE TRIGGER TBI_CLIENTS FOR CLIENTS 
ACTIVE BEFORE INSERT POSITION 0 
AS 
  BEGIN 
    NEW.CLIENT_ID = GEN_ID(NEWID, 1); 
  END
дело в том что мне нужно генерировать новый ID от последнего а не с первой позиции надеюсь понятно сформулировал запрос... заранее благодарю!))))

Добавлено через 6 минут
еще для полной картины... у меня таблица 'проверка' в ней четыре столбца товар остаток вася сумма.
я импортирую 2 и 3 столбец а первый хочу что бы сгенерировал....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2012, 12:47
Ответы с готовыми решениями:

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это предприятие с именем таблицы База практик в...

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это предприятие с именем таблицы База практик в...

Триггер, вызывающий процедуру, в которой выполняется select к этой таблице (откуда был вызван триггер)
есть тригерр create or replace trigger quickstart.quickstart.ACRIONS_COMMIT_TR after update on quickstart.actions for each...

10
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
12.03.2012, 12:52
Такого синтаксиса в MSSQL нет
Как и триггеров BEFORE
1
0 / 0 / 0
Регистрация: 29.02.2012
Сообщений: 21
12.03.2012, 12:56  [ТС]
вот и я так же подумал а чем мне можно в такой ситуации воспользоваться!? дело в том что мне желательно именно в триггере прописать генерацию...
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
12.03.2012, 13:08
Нужно в качестве дефолтного значения по умолчанию указать системную функцию NEWID(). Тогда про это поле при вставке/импорте записей можно забыть.
1
0 / 0 / 0
Регистрация: 29.02.2012
Сообщений: 21
12.03.2012, 13:14  [ТС]
тогда такой вопросик он будет прибавлять единицу к последней записи в этом столбце или как будет происходить исчисление!? и можно хотя бы какой нибудь наглядный примерчик!?
0
 Аватар для devart dbforge
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
12.03.2012, 14:14
Цитата Сообщение от Grin89 Посмотреть сообщение
вот и я так же подумал а чем мне можно в такой ситуации воспользоваться!? дело в том что мне желательно именно в триггере прописать генерацию...
Если у Вас MS SQL Server 2012 можно использовать последовательности.
Однако, чем вызвано желание инкрементировать ID именно в триггере?
0
0 / 0 / 0
Регистрация: 29.02.2012
Сообщений: 21
12.03.2012, 14:59  [ТС]
у меня SQL server 2005 дело в том что я импортирую определенные столбы из EXCEL буквально 2 и 3 и мне нужно что бы первому столбцу сгенерировался ID в моем случае для проверки это поле названо товар... у меня так же идет проверка на совпадение по этим двум полям если они есть то они не добавляются при импорте если их нет идет процедура вставки... мне казалось что триггер был бы наиболее простым решение данной проблемки... если есть возможность прописать это через процедуру буду рад но как это сделать я опять же не знаю....
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
12.03.2012, 15:00
Я понял! Вы немного не понимаете, что такое GUID. Это 128-битное число НЕ повторение которого гарантировано Биллом Гейтцем )). NEWID() так не работает, оно НЕ будет прибавлять 1 к следующей записи)). Там сложный алгоритм получения числа (я даже не знаю какой). Если вы хотите чтобы каждая последующая запись получала +1 к счетчику, то лучше всего будет для ключевого поля установить тип int и автоэнкремент, а также назначить шаг и начальную позицию для приращения.
И делать это в триггере не надо (т.е. согласен с коллегами) - изврат какой-то (ни в коем случае не хочу обидеть - говорю как есть)
Вот скрин, чтобы было совсем предельно ясно:
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
12.03.2012, 15:04
Значит так! Т.е. вы не хотите, чтобы осуществлялась вставка по совпадающим ключевым полям? Или как? А зачем тогда генерировать новые ID?
Надо просто запрос написать на вставку таким образом, чтобы записи с существующими ID не вставлялись! Хотя я может неправильно понял задачу!
1
 Аватар для devart dbforge
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
12.03.2012, 17:14
Цитата Сообщение от Grin89 Посмотреть сообщение
у меня SQL server 2005 дело в том что я импортирую определенные столбы из EXCEL буквально 2 и 3 и мне нужно что бы первому столбцу сгенерировался ID в моем случае для проверки это поле названо товар... у меня так же идет проверка на совпадение по этим двум полям если они есть то они не добавляются при импорте если их нет идет процедура вставки... мне казалось что триггер был бы наиболее простым решение данной проблемки... если есть возможность прописать это через процедуру буду рад но как это сделать я опять же не знаю....
Если я Вас правильно понял, то на поле ID ставите автоинкремент и забываете о нем.
А при вставке проверяете на отсутствие совпадения по столбцам 2 и 3. Что-то вроде:

T-SQL
1
2
3
4
5
6
INSERT INTO <Таблица_Получатель>(field_2,field_3)
SELECT DISTINCT t_s.field_2,t_s.field_3
FROM <из_чего_Вы_там_импортируете> t_s
  LEFT JOIN <Таблица_Получатель> t_t
    ON t_s.field_2=t_1.field_2 AND t_s.field_3=t_1.field_3
WHERE t_t.field_2 IS NULL AND t_t.field_3 IS NULL
1
0 / 0 / 0
Регистрация: 29.02.2012
Сообщений: 21
13.03.2012, 13:29  [ТС]
народ огромное спасибо за понимание и содействие в моих проблемках)))))
я сделал все что мне было нужно следующим образом....
мой импорт в хранимую таблицу проверка1(таблицу я каждый раз затираю)
SQL
1
2
3
4
5
6
7
8
ALTER PROCEDURE inserted
AS
INSERT INTO проверка1
SELECT '',остаток,вася,сумма 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
        'Excel 8.0;Database=C:\Documents and Settings\UserXPои документы\111.xls',
        'SELECT * FROM [Лист1$]')
EXEC inserted
затем делаю запрос на представление не повторяющихся записей в таблице проверка(по второму полю)...
SQL
1
2
3
4
5
ALTER VIEW  жорик 
AS
SELECT dbo.проверка1.остаток,dbo.проверка1.вася,dbo.проверка1.сумма
FROM dbo.проверка1
WHERE dbo.проверка1.остаток NOT IN (SELECT c.остаток FROM dbo.проверка c)
после чего делаю представление процедуркой...
SQL
1
2
3
4
CREATE PROCEDURE жорик1
AS 
SELECT*FROM жорик
EXEC жорик1
заем импортирую данные запроса на представление в таблицу проверка(ID ставится автоматом)
SQL
1
2
3
4
5
6
7
ALTER  PROCEDURE inserd
AS
 
INSERT INTO проверка
EXEC жорик1
SELECT * FROM жорик1 
EXEC inserd
все работает прекрасно... тьфу тьфу тьфу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2012, 13:29
Помогаю со студенческими работами здесь

Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик ч
Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик числа добавленных строк.

Т-Триггер на ИЛИ-НЕ элементах и что это за триггер?
Здравствуйте. Нужно построить схему Т-Триггера через ИЛИ-НЕ элементы. Вот сам триггер ...

Взаимодействие коллайдеров (триггер и не триггер)
подскажите почему не срабатывает коллайдер с тригером на коллайдере без тригера? и как выйти из этой ситуации private void...

Написать генерацию слова
Суть задачи: Написать генерацию слова. Примечания: Первые 4 символа цифры, 2 буквы, 4 цифры но нули или единичке при этом 1 единичка должны...

Задача на генерацию паролей
Нужно создать программу в которой будет n - количество символов пароля хотя бы a -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru