Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Tdmitry Member Откуда: Москва Сообщений: 78 |
Доброго всем дня! Подскажите, что делать? вставили строки в таблицу insert'ом. первичный ключ при этом автоматом не проставлялся. вставили вручную. Теперь же при работе в сторонней программе, которая обращается к базе, при попытке внести новые записи в вышеуказанную таблицу ругается на дублирование первичного ключа |
19 авг 13, 09:14 [14723922] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Опять кастинг на битву экстрасексов? Скрипт создания таблицы покажи, Гульчатай. |
||
19 авг 13, 09:21 [14723941] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
Tdmitry, так вы можете проверить, сейчас в таблице "первичный" ключ дублируется? программа точно писалась с учетом того что это полем будет первичным ключом? или вы его сами решили изменить? |
19 авг 13, 09:23 [14723951] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
declare @ID as int set @ID=15566 INSERT INTO MED_PLPARAM (MED_PLPARAM_ID ,PL_PARAM_ID, MEDECINS_ID) SELECT @ID+ (SELECT SUM(1) FROM PL_SUBJ_PARAM psp JOIN PL_SUBJ ps ON PS.PL_SUBJ_ID = PSP.PL_SUBJ_ID JOIN MEDECINS m ON M.MEDECINS_ID=PS.MEDECINS_ID where psp.PL_PARAM_ID=79 AND m.MEDECINS_ID<=MEDECINS.MEDECINS_ID) , 79 ,MEDECINS.MEDECINS_ID from PL_SUBJ_PARAM JOIN PL_SUBJ ON PL_SUBJ.PL_SUBJ_ID = PL_SUBJ_PARAM.PL_SUBJ_ID JOIN MEDECINS ON MEDECINS.MEDECINS_ID=PL_SUBJ.MEDECINS_ID where PL_PARAM_ID=79 MED_PLPARAM_ID тот самый ключ Есть ли возможность поменять текущее значение первичного ключа? при создании новой строки сервер пытается ID задать 15566 опять |
19 авг 13, 09:25 [14723959] Ответить | Цитировать Сообщить модератору |
saycale Member Откуда: Москва->Сидней Сообщений: 32 |
нужен полный скрипт создания таблицы (с информациях о ключах, индексах и триггерах) и сообщение об ошибке, иначе будем заниматься гаданием. |
19 авг 13, 09:26 [14723963] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
где его искать? скрипт создания? |
19 авг 13, 09:27 [14723970] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
Violation of PRIMARY KEY constraint 'PK_MED_PLPARAM'. Cannot insert duplicate key in object 'dbo.MED_PLPARAM'. The statement has been terminated вот ошибка |
19 авг 13, 09:31 [14723981] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Ну ладно, тредстартер "из больницы" - там фсе больные. Посмотреть то на результат SELECT @ID+ (SELECT SUM(1) FROM PL_SUBJ_PARAM psp JOIN PL_SUBJ ps ON PS.PL_SUBJ_ID = PSP.PL_SUBJ_ID JOIN MEDECINS m ON M.MEDECINS_ID=PS.MEDECINS_ID where psp.PL_PARAM_ID=79 AND m.MEDECINS_ID<=MEDECINS.MEDECINS_ID) не судьба? |
||
19 авг 13, 09:33 [14723995] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
правой клавишей мыши на таблицу, "создать сценарий - используя create...." |
||
19 авг 13, 10:01 [14724105] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[MED_PLPARAM]( [MED_PLPARAM_ID] [int] NOT NULL, [PL_PARAM_ID] [int] NOT NULL, [MEDECINS_ID] [int] NULL, [KRN_CREATE_DATE] [datetime] NULL, [KRN_CREATE_USER_ID] [int] NULL, [KRN_MODIFY_DATE] [datetime] NULL, [KRN_MODIFY_USER_ID] [int] NULL, [KRN_CREATE_DATABASE_ID] [int] NULL, [KRN_MODIFY_DATABASE_ID] [int] NULL, [KRN_GUID] [varchar](36) NULL, CONSTRAINT [PK_MED_PLPARAM] PRIMARY KEY CLUSTERED ( [MED_PLPARAM_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO |
19 авг 13, 10:05 [14724123] Ответить | Цитировать Сообщить модератору |
сургей Member Откуда: Сообщений: 5 |
Кури DBCC CHECKIDENT |
19 авг 13, 10:06 [14724126] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||
19 авг 13, 10:10 [14724137] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Tdmitry, как "сторонняя программа" расчитывает PK? Какой вообще запрос на добавление записи она посылает серверу (см. SQL Server Profiler)? |
19 авг 13, 10:12 [14724141] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
select MED_PLPARAM_ID from MED_PLPARAM where MEDECINS_ID = 1737 and PL_PARAM_ID = 7 declare @P1 int exec up_get_id @KeyName = 'MED_PLPARAM', @Shift = 1, @ID = @P1 output select @P1 Result insert into MED_PLPARAM (MED_PLPARAM_ID,PL_PARAM_ID,MEDECINS_ID, KRN_CREATE_DATE, KRN_CREATE_USER_ID, KRN_MODIFY_DATE, KRN_MODIFY_USER_ID) values(4359,7,1737, convert(varchar(30),GetDate(),20), 1, convert(varchar(30),GetDate(),20), 1) |
19 авг 13, 10:23 [14724188] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Tdmitry, то есть, в ответ Вы показываете снаружи чёрный ящик (up_get_id) и уверены, что все сразу разберутся во всём что ли? ![]() Откуда взялась константа 4359? |
19 авг 13, 10:50 [14724306] Ответить | Цитировать Сообщить модератору |
ambarka_max Member Откуда: Россия Сообщений: 517 |
Смею побыть капитаном: в up_get_id используется некая таблица, где и лежит число 4359. И оно никак не связано/не соответствует нужному для инсерта... |
19 авг 13, 10:55 [14724333] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
ambarka_max, все может быть... |
19 авг 13, 11:02 [14724366] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
все что было в профайлере. откуда берутся эти цифры, сам не знаю |
19 авг 13, 11:12 [14724408] Ответить | Цитировать Сообщить модератору |
ambarka_max Member Откуда: Россия Сообщений: 517 |
Tdmitry, нужен текст процедуры up_get_id |
19 авг 13, 11:14 [14724418] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Это все, что вы указали трассировать
Из процедуры up_get_id |
||||
19 авг 13, 11:17 [14724437] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO ALTER procedure [dbo].[up_get_id](@KeyName varchar(30),@Shift integer,@ID integer output) as begin declare @rc int, @err int begin tran update V set LAST_VALUE = COALESCE(LAST_VALUE,0) + @Shift from ID_VALUES V with (UPDLOCK, ROWLOCK) where Key_NAME = @KeyName select @rc = @@RowCount, @err = @@Error if @err <> 0 goto L_ERROR if @rc = 0 begin insert into ID_VALUES values(@KeyName, @Shift) if @@ERROR<>0 goto L_ERROR end select @ID = LAST_VALUE - @Shift + 1 from ID_VALUES where KEY_NAME=@KeyName commit tran return 0 L_ERROR: if @@TRANCOUNT<>0 rollback tran raiserror 50001 'E001-Error in sp_get_id.' end |
19 авг 13, 11:20 [14724458] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
В таблице ID_VALUES хранятся значения, которые ваше приложение использует для генерации ключей Найдите там запись для таблицы MED_PLPARAM и исправьте значение на нужное. |
19 авг 13, 11:33 [14724529] Ответить | Цитировать Сообщить модератору |
Tdmitry Member Откуда: Москва Сообщений: 78 |
ок! всем большое спасибо! |
19 авг 13, 11:52 [14724656] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |