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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cannot insert duplicate key row in object 
:(
    Опции темы
draiv
Дата 31.7.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.5.2007

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



есть хранимая процедура, в которой следующая часть кода:
Код

SELECT @QueryId = QueryId from Query WHERE Text=@QueryText
    
    IF @QueryId IS NULL
    BEGIN        
        INSERT INTO Query(Text) VALUES(@QueryText)
        
        SET @ErrValue = @@ERROR
                
        IF (@ErrValue = 2601) -- someone has inserted record before us, so we have to get query id
             SELECT @QueryId = QueryId from Query WHERE Text=@QueryText
        ELSE IF (@ErrValue = 0)
            SET @QueryId = @@IDENTITY            
        ELSE
            RETURN
    END

Стролбец Text в таблице уникальный.
Приложение многопоточное.
Эта процедура вызывается без транзакции.
Вопрос: при каких обстоятельсвах может возникнуть ошибка:
Cannot insert duplicate key row in object 'dbo.Query' with unique index 'IX_Query'.
(Ведь в процедуре делается проверка, есть данное значение или нет)

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.2.2007
Где: Ростовская обл. г . Таганрог

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



Твоя проверка не проверяет NULL-значения столбца Text  smile 
PM MAIL   Вверх
draiv
Дата 2.8.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.5.2007

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



Столбец Text в таблице not null, проверка делается в приложении перед вызовом процедуры.
если null процедура не вызывается.
PM MAIL   Вверх
LuMee
Дата 7.8.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

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



Цитата(draiv @ 31.7.2007,  12:16)
Стролбец Text в таблице уникальный.
Приложение многопоточное.
Эта процедура вызывается без транзакции.
Вопрос: при каких обстоятельсвах может возникнуть ошибка:
Cannot insert duplicate key row in object 'dbo.Query' with unique index 'IX_Query'.
(Ведь в процедуре делается проверка, есть данное значение или нет)

Первое, что приходит в голову: один поток успевает воткнуть новую запись с тем же Text после того, как другой поток выполнил проверку, но до того, как он реально внес новую запись. В этом случае во втором потоке будет ошибка. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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