Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Ошибка (число прочтений - 2414 )
U_zer
Экс-Участник


Ошибка
11. Января 2009 :: 11:30
Печать  
Всем привет!
Почему-то при выполнении кода возникает ошибка типа:
State 23000, native 2627, message [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK__#TempT____________0FE952BE'. Cannot insert duplicate key in object 'dbo.#TempT'.

Код
Выбрать все
	Запрос = СоздатьОбъект("OdbcRecordSet");
	Если Запрос.Выполнить("if Exists (select * from tempdb..sysobjects where id = object_id('tempdb..#TempT') and sysstat & 0xf = 3) drop table #TempT") = 0 Тогда
		Сообщить(Запрос.ПолучитьОписаниеОшибки());
	КонецЕсли;
	Если Запрос.Выполнить("CREATE TABLE #TempT ( Tovar Char(9), Sklad char(9), PRIMARY KEY CLUSTERED (Tovar) )") = 0 Тогда
		Сообщить(Запрос.ПолучитьОписаниеОшибки());
	КонецЕсли;
	Запрос.УстановитьТекстовыйПараметр("ТД", ТекущийДокумент());
	Запрос.УстановитьТекстовыйПараметр("Склад", загСклад);
	Запрос.УстановитьТекстовыйПараметр("Раб", enum.ВидыТоваров.Работа);


	Если Запрос.Выполнить("insert into #TempT (tovar, sklad)
					|select distinct
					|$Д.табТовар,
					|Case
					|when $Д.табСклад = $ПустойИД then :Склад
					|else $Д.табСклад end
					|from $ДокументСтроки.РасходнаяНакл Д
					|inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = $Д.табТовар
					|where Д.iddoc = :ТД and $Д.табКоличество>0 and $СпрТ.спрВидТовара <> :Раб
					|")=0 Тогда
		Сообщить(Запрос.ПолучитьОписаниеОшибки());
	КонецЕсли;
 

  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Ошибка
Ответ #1 - 11. Января 2009 :: 12:01
Печать  
ты сначала посмотри что select  выдает
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ошибка
Ответ #2 - 11. Января 2009 :: 14:24
Печать  
Distinct по паре товар/склад, ключ по товару.
И чего удивляться?
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Ошибка
Ответ #3 - 11. Января 2009 :: 14:30
Печать  
и я о том-же
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Ошибка
Ответ #4 - 12. Января 2009 :: 07:18
Печать  
kiruha писал(а) 11. Января 2009 :: 14:24:
Distinct по паре товар/склад, ключ по товару.
И чего удивляться?


Да это понятно. В строках документа присутствует одинаковый товар по разному складу. Вопрос в другом: эту врем. таблицу я использую в других запросах, ошибку устранил, выкинув  PRIMARY KEY CLUSTERED (Tovar), критично ли это будет по скорости? И вообще, есть ли смысл указывать индексы для врем. таблиц и если есть, то какие лучше?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка
Ответ #5 - 12. Января 2009 :: 12:38
Печать  
Почти все таблицы должны иметь индексы (почти - это практически все все все).
А также практически все таблицы должны иметь первичный ключ - таблица без первичного ключа - плохая таблица, ибо в этом случае в качестве первичного ключа сервер будет формировать свое поле и первичный ключ у таблицы все равно будет, только использовать его в запросах будет невозможно.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Ошибка
Ответ #6 - 14. Января 2009 :: 00:42
Печать  
Таблица без индекса - куча Улыбка
А вот интересно, если реально нет смысла заводить примари кей, он использоваться не будет как нужно - что плохого?
Есть кластерный индекс легкий и все хорошо (вроде бы), пусть даже и значения повторяются немного
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Ошибка
Ответ #7 - 14. Января 2009 :: 07:48
Печать  
Вадимко писал(а) 14. Января 2009 :: 00:42:
Таблица без индекса - куча Улыбка
А вот интересно, если реально нет смысла заводить примари кей, он использоваться не будет как нужно - что плохого?
Есть кластерный индекс легкий и все хорошо (вроде бы), пусть даже и значения повторяются немного


Так вот в моем случае, при наличии повторяющихся строк, какой индекс предпочтительнее? И вообще, если есть доходчивое описание использования индексов, киньте ссылочку, плиз! BOL не предлагать!  Улыбка
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибка
Ответ #8 - 14. Января 2009 :: 08:31
Печать  
Цитата:
Так вот в моем случае, при наличии повторяющихся строк, какой индекс предпочтительнее? И вообще, если есть доходчивое описание использования индексов, киньте ссылочку, плиз! BOL не предлагать!  Улыбка

В твоем случае я бы написал: PRIMARY KEY CLUSTERED (Tovar, Sklad) или PRIMARY KEY CLUSTERED (Sklad, Tovar). Разницу можно или не учитывать, или в зависимости от селективности.
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка
Ответ #9 - 14. Января 2009 :: 08:40
Печать  
DmitrO писал(а) 14. Января 2009 :: 08:31:
Цитата:
Так вот в моем случае, при наличии повторяющихся строк, какой индекс предпочтительнее? И вообще, если есть доходчивое описание использования индексов, киньте ссылочку, плиз! BOL не предлагать!  Улыбка

В твоем случае я бы написал: PRIMARY KEY CLUSTERED (Tovar, Sklad) или PRIMARY KEY CLUSTERED (Sklad, Tovar). Разницу можно или не учитывать, или в зависимости от селективности.


Спасибо! Блин, как же все просто, оказывается, когда знаешь ...
Так все-таки, может кто посоветует доходчивое описание использования индексов (желательно с примерами).
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать