![]() |
|
Модераторы: Akina |
![]()
|
|
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: нет Всего: 6 |
Как можно узнать значение сгенерированного MS SQL Server 2000 уникального ключа или ключей при добавление новых строк.
Например, таблица ExampleTable имеет столбцы ID (уникальный индекс), Column1 и Column2, из программы на C++ через библиотеку APISQL выполняется команда INSERT INTO ExampleTable (Column1, Column2) VALUES ('ПервоеЗначение', 'Второе значение') или даже INSERT INTO ExampleTable (Column1, Column2) SELECT Column1, Column2 FROM OtherTable WHERE (LEFT(Column1, 1) = 'A') СУБД генерирует уникальное значение ID, так вот его надо узнать, чтобы добавлять строки в другие таблицы, которые будут ссылаться на это ключевое поле. И ещё, как можно в С++ представить тип данных SQL Server 2000 Decimal, чтобы полностью хранить ID, о котором говорилось раньше. Или подскажите как эта проблема (если это вообще проблема) решается в других языках. Огромное СПАСИБО всем, кто проявит интерес к этой теме. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Если честно с такой проблемой никогда не сталкивался, так как предпочитаю по другому строить логику приложения, через хранимые процедуры.
Поэтому навскидку ответить не могу. Но вообще-то тебе надобно узнать значение генератора. Это можно сделать через SQL. -------------------- |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 5 Всего: 207 |
Переменная @@Identity после выполнения Insert содержит в себе последнее уникальное поле, но если установлен триггер, то то она вернёт значение не той таблицы что ты меняешь, а последней над которой сработал триггер, тогда надо использовать Scope_Identity
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Могу только добавить, что существует еще IDENT_CURRENT("table_name") Returns the last identity value generated for a specified table in any session and any scope. Я лично предпочитаю ВСЕ изменения делать через процедуры - тогда и триггеров не надо и всегда можно вернуть IDENTITY. Удобно. Кстати, как недавно выяснилось такой же вариант советует и один из создателей SQL Server - что мне было приятно |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: нет Всего: 6 |
Всем спасибо, это то, что нужно. По вашим ответам нашёл нужную инфу во встроенной справке и теперь успешно использую все три варианта. Единственное, не совсем понятно, что имел ввиду Pegas, говоря о хранимых процедурах, я не понял, как с помощью них можно решить эту проблему, не прибегаю к помощи @@Identity, Scope_Identity или Ident_Current.
|
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Можно получить и через хранимые процедуры, но не это я имел ввиду. Я имел ввиду то же, что сказал и AntonSaburov
-------------------- |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |