Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Об уникальных индексах SQL Server 2000 
:(
    Опции темы
RAN
Дата 14.3.2003, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 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, о котором говорилось раньше. Или подскажите как эта проблема (если это вообще проблема) решается в других языках.

Огромное СПАСИБО всем, кто проявит интерес к этой теме.

PM MAIL ICQ   Вверх
Medved
Дата 14.3.2003, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



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

Поэтому навскидку ответить не могу.

Но вообще-то тебе надобно узнать значение генератора. Это можно сделать через SQL.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 14.3.2003, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 14.3.2003, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Переменная @@Identity после выполнения Insert содержит в себе последнее уникальное поле, но если установлен триггер, то то она вернёт значение не той таблицы что ты меняешь, а последней над которой сработал триггер, тогда надо использовать Scope_Identity


Могу только добавить, что существует еще IDENT_CURRENT("table_name")
Returns the last identity value generated for a specified table in any session and any scope.

Я лично предпочитаю ВСЕ изменения делать через процедуры - тогда и триггеров не надо и всегда можно вернуть IDENTITY. Удобно.

Кстати, как недавно выяснилось такой же вариант советует и один из создателей SQL Server - что мне было приятно biggrin.gif

PM MAIL WWW ICQ   Вверх
RAN
Дата 16.3.2003, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: нет
Всего: 6



Всем спасибо, это то, что нужно. По вашим ответам нашёл нужную инфу во встроенной справке и теперь успешно использую все три варианта. Единственное, не совсем понятно, что имел ввиду Pegas, говоря о хранимых процедурах, я не понял, как с помощью них можно решить эту проблему, не прибегаю к помощи @@Identity, Scope_Identity или Ident_Current.
PM MAIL ICQ   Вверх
Medved
Дата 17.3.2003, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Можно получить и через хранимые процедуры, но не это я имел ввиду. Я имел ввиду то же, что сказал и AntonSaburov
Цитата
Я лично предпочитаю ВСЕ изменения делать через процедуры - тогда и триггеров не надо и всегда можно вернуть IDENTITY. Удобно.

Кстати, как недавно выяснилось такой же вариант советует и один из создателей SQL Server - что мне было приятно.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.