Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Одновременно вставить записи во связанные таблицы через id  [new]
Daul
Member

Откуда:
Сообщений: 6
Помогите мне вставить записи посредством id во связанные таблицы (через текущий id)
Вот мой пример:
insert into dbo.prepod(dbo.prepod.familiya, dbo.prepod.imya, dbo.prepod.otchestvo, dbo.prepod.foto, dbo.prepod.doljnost, dbo.prepod.nauchzvanie, dbo.prepod.godrojdeniya, dbo.prepod.vozrast,
dbo.prepod.pol, dbo.prepod.nacionalnost, dbo.prepod.adrespropiski, dbo.prepod.adresprojivaniya, dbo.prepod.email, dbo.prepod.sottelephon, dbo.prepod.domtelephon)
values( @familiya, @imya, @otchestvo, @foto, @doljnost, @nauchzvanie, @godrojdeniya,(select year(getdate())- year(@godrojdeniya )), @pol, @nacionalnost, @adrespropiski, @adresprojivaniya, @email, @sottelephon, @domtelephon)
--declare @idinsert as int
--set @idinsert=dbo.prepod.id
insert into dbo.ident(dbo.ident.id_prepod, dbo.ident.loginident, dbo.ident.passwordident) values (@idinsert,@logininsert,@passwordinsert)

end
select top (10) * from dbo.prepod where dbo.prepod.id>0 order by dbo.prepod.id desc
end
18 янв 12, 08:43    [11922469]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Daul,

scope_identity() вам в помощь
Есть еще директива output
18 янв 12, 08:56    [11922506]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
Barkan
Member

Откуда: Дремучее заМКАДье
Сообщений: 504
Daul,

select @idinsert = ident_current('prepod')
18 янв 12, 09:00    [11922513]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Barkan
Daul,

select @idinsert = ident_current('prepod')
Вот только не это
18 янв 12, 09:09    [11922536]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
Daul
Member

Откуда:
Сообщений: 6
iap, данный метод работает успешно. Всем спасибо). Почему Вы против данного метода?
18 янв 12, 09:27    [11922597]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Daul
iap, данный метод работает успешно. Всем спасибо). Почему Вы против данного метода?
Потому что получите чужой id.
Что делать будете?
18 янв 12, 09:29    [11922609]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
Daul
Member

Откуда:
Сообщений: 6
iap, Может быть создать переменную, которая будет временно хранить id таблицы prepod и потом вставить ее в другую, связанную ей таблицы ident. Помогите пожалуйста.
18 янв 12, 09:34    [11922635]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Daul
iap, Может быть создать переменную, которая будет временно хранить id таблицы prepod и потом вставить ее в другую, связанную ей таблицы ident. Помогите пожалуйста.

для этого есть кляуза OUTPUT
18 янв 12, 09:36    [11922647]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Daul,

А какие еще у вас вопросы остались? Функции вам назвали. Если у вас вставляется всегда одна строка, то можете сделать через переменную, после вставки присваиваете ей результат функции scope_identity() (понадежнее чем ident_current). После этого делаете с этой переменной все что хотите. Вставляете ее значение куда хотите.

Если у вас идет вставка множества строк или вам хочется сразу добавить это значение в таблицу, и версия сервера > 2000, то директива output, ссылку я привел, там по примерам совсем не трудно разобраться.
18 янв 12, 09:44    [11922682]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SomewhereSomehow
Daul,

А какие еще у вас вопросы остались? Функции вам назвали. Если у вас вставляется всегда одна строка, то можете сделать через переменную, после вставки присваиваете ей результат функции scope_identity() (понадежнее чем ident_current). После этого делаете с этой переменной все что хотите. Вставляете ее значение куда хотите.

Если у вас идет вставка множества строк или вам хочется сразу добавить это значение в таблицу, и версия сервера > 2000, то директива output, ссылку я привел, там по примерам совсем не трудно разобраться.
SCOPE_IDENTITY() и OUTPUT будут бесполезны, если у таблицы есть триггер INSTEAD OF INSERT
18 янв 12, 09:46    [11922693]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
Daul
Member

Откуда:
Сообщений: 6
iap, у меня версия сервера MS SQL Server 2008 R2, триггеры не использую, только процедуры. Могу ли я использовать SCOPE_IDENTITY() и OUTPUT ?
18 янв 12, 10:04    [11922781]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Daul
iap, у меня версия сервера MS SQL Server 2008 R2, триггеры не использую, только процедуры. Могу ли я использовать SCOPE_IDENTITY() и OUTPUT ?
OUTPUT покрывает SCOPE_IDENTITY() как бык овцу
18 янв 12, 10:13    [11922845]     Ответить | Цитировать Сообщить модератору
 Re: Одновременно вставить записи во связанные таблицы через id  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
iap
SCOPE_IDENTITY() и OUTPUT будут бесполезны, если у таблицы есть триггер INSTEAD OF INSERT

Это понятно, но вопрос в том, что будет полезно? @@identity вернет пургу, если есть обычный триггер и в нем происходит вставка в другую таблицу с идентити, а ident_current вернет пургу, если в промежутке другой процесс добавит запись или сам триггер добавит запись. Но все-таки инстед триггеры бОльшая редкость нежели обычные или многопользовательский доступ...
18 янв 12, 10:38    [11923023]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить