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

Откуда:
Сообщений: 7
Есть процедура, в ней что-то типа такого:

begin tran

insert into table_1
exec sp_executesql proc1

insert into table_2
exec sp_executesql proc2

commit tran

В table_2 есть констрэинт приявзанный к данным в table_1 (типа table_2.id = table1.t2_id)

Периодически(но очень редко) эта хранимая процедура вылетает с ошибкой констрэинта таблицы table_2 "The INSERT statement conflicted the FOREIGN KEY constraint" т.е. при попытке вставить в table_2 строку с id которого нет в table1.t2_id

Вопрос: почему это происходит и как с этим бороться?
Может распараллеливаются процессы и один обгоняет другого? Если их вставить в разные транзакции это поможет?
Пробовал блокировать данные которые достаются с помощью proc1 но ошибка не повторяется
22 фев 12, 14:03    [12137064]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
Забыл добавить что при повторном запуске с теми же самыми параметрами ошибка не повторяется, то есть происходит не из-за данных
22 фев 12, 14:05    [12137088]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
основная процедура на SQL Server 2005,
proc1 и proc2 на SQL Server 2000
22 фев 12, 14:09    [12137123]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
Glory
Member

Откуда:
Сообщений: 104751
wigiwigi
Вопрос: почему это происходит и как с этим бороться?

Наверное так написан ваш код.

wigiwigi
Может распараллеливаются процессы и один обгоняет другого?

Команды одного пакета всегда выполняются последовательно

wigiwigi
Если их вставить в разные транзакции это поможет?

Нет
22 фев 12, 14:10    [12137130]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
Glory,
Данные одинаковые годичной давности, ошибка возникает и пропадает сама собой без изменения кода
22 фев 12, 14:20    [12137222]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
Glory
Member

Откуда:
Сообщений: 104751
wigiwigi
ошибка возникает и пропадает сама собой без изменения кода

Вот только не надо думать, что это сервер неправильно выполняет ваш прекрасный код.
22 фев 12, 14:21    [12137234]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
sp_executesql выполняет текст запроса, а не вызывает процедуры
Или я ошибаюсь?
22 фев 12, 14:23    [12137256]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
iap,
да выполняет и туда можно вставить процедуру
22 фев 12, 14:56    [12137541]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
wigiwigi
iap,
да выполняет и туда можно вставить процедуру
Куда - туда?
Скрипт, который Вы писали, - это в точности тот самый скрипт,
который выполняет сервер и сообщает про нарушение FOREIGN KEY?
22 фев 12, 15:11    [12137635]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
iap,
нет, я написал приблизительно, на самом деле там
sp_executesql @proc_call,
N'@ret_code INT OUTPUT, @date_from DATETIME, @date_to DATETIME'
, @ret_code OUTPUT, @date_from, @date_to
22 фев 12, 15:29    [12137785]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
wigiwigi,

зачем же писать "приблизительно"?
Чтобы получить "приблизительный" ответ, причём не по теме?
22 фев 12, 15:31    [12137811]     Ответить | Цитировать Сообщить модератору
 Re: Два последовательных инсерта  [new]
wigiwigi
Member

Откуда:
Сообщений: 7
Glory,
хорошо, буду дальше копать код
22 фев 12, 15:41    [12137889]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить