Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Свойство IDENTITY   Найти похожие ветки 

 
Patrick ©   (2004-04-14 11:36) [0]

Добрый день! Вопрос таков : есть у меня таблица FUELS, в ней 2 поля FuelCode (tinyint) и FuelName (char(10)), у поля FuelCode стоит свойство IDENTITY, проблема состоит в том, что добавляя новую запись INSERT INTO FUELS (FUELNAME) VALUES ("Новое значение"), вылезает ошибка по поводу дублирования ключа, хотя в других таблицах, где вроде бы все также всё в норме.


 
bushmen ©   (2004-04-14 11:46) [1]

А у тебя не превышено ли значение на тип tinyint ?


 
Patrick ©   (2004-04-14 11:56) [2]

Это исключено, таблица пустая. А значения IDENTITY SEED и IDENTITY INCREMENT установлены в 1.


 
clickmaker ©   (2004-04-14 12:00) [3]


> хотя в других таблицах, где вроде бы все также

Значит все-таки не все также


 
A_N_D ©   (2004-04-14 12:04) [4]

Поставь IDENTITY SEED
SELECT IDENT_CURRENT("FUELS")


 
bushmen ©   (2004-04-14 12:05) [5]

Попробуй выполнить insert из Query Analyser
И попробуй обнулить счетчик
dbcc checkident("MyTabel", reseed, 1)


 
Patrick ©   (2004-04-14 12:18) [6]

Счетчик, обнулял, а выполняя SELECT IDENT_CURRENT("FUELS") получил значение 0, разницей между данным случаем и другими работающими объектами является то, что там тип поля с IDENTITY не TINYINT, а INTEGER. Может в этом причина, хотя не должно быть.


 
Nikolay M. ©   (2004-04-14 12:32) [7]

Вместо того, чтобы устраивать ромашка "тоже - не тоже", лучше донеси народу мысль, чем оправдано использование в качестве IDENTITY именно типа tinyint?


 
Patrick ©   (2004-04-14 13:18) [8]

Так что же в этом кривого такого, ежели не давать юзеру самому заносить значение кода, а пусть при добавлении само формируется, мож я чего то не понимаю, ты уж просвети?


 
bushmen ©   (2004-04-14 13:23) [9]

А заменить на тин INTEGER трудно? Давно бы уже проверил.


 
Patrick ©   (2004-04-14 13:33) [10]

Поменял, ситуция та же, одну строчку добавляет нормально, а вторую ругается на дублирование ключа, такое впечатление, что счетчик не срабатывает.


 
sniknik ©   (2004-04-14 13:40) [11]

если счетчик не срабатывает значит это не счетчик, проверил с тиниинт все работает.


 
31512 ©   (2004-04-14 13:42) [12]

Для Patrick
У меня была такая проблема. Я ещё успешно разрешил
http://delphimaster.net/view/3-1080281412/

ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

Или пытай Romkinа, который говорит, чту у него есть друг, которому удалось подружиться с identity.


 
A_N_D ©   (2004-04-14 13:43) [13]

А ты IDENTITY в Yes установил?


 
bushmen ©   (2004-04-14 13:44) [14]

>ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

А какое отношение DB компоненты имеют к MSSQL ?


 
31512 ©   (2004-04-14 13:47) [15]

Для bushmen ©
Никакого, в том-то и дело. А тип identity есть только в MSSQL.


 
sniknik ©   (2004-04-14 13:50) [16]

люди! откровение века! на мерседесах ездить нельзя! у запорожцев тормоза неисправны.


 
Ega23 ©   (2004-04-14 13:53) [17]

ОТКАЖИСЬ ОТ IDENTITY, ПОСКОЛЬКУ DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ.

Бред какой-то, прости меня Господи...


 
Ega23 ©   (2004-04-14 13:53) [18]

А ежели по-существу, то это сильный ход IDENTITY на tinyint ставить...


 
31512 ©   (2004-04-14 13:55) [19]

Ega23
Где ты был, дорогой, когда я с ним маялся?
http://delphimaster.net/view/3-1080281412/


 
Patrick ©   (2004-04-14 13:58) [20]

Да компоненты DB не причем, т.к. я всё в Enterprise"е делаю, без компонент Delphi.


 
31512 ©   (2004-04-14 14:04) [21]

Для Patrick ©
Тьфу, прости меня, не разобрался. Ну конечно! Только запросом записи вставляешь?


 
Ega23 ©   (2004-04-14 14:27) [22]

Где ты был, дорогой, когда я с ним маялся?

Ну читал я ту ветку, ещё тогда, в марте. Я не понял, почему "DB КОМПОНЕНТЫ ПРИНЦИНИАЛЬНО НЕ ПОНИМАЮТ, ЧТО ЭТО ТАКОЕ".
Вот уже 4 года базами занимаюсь и НИ РАЗУ проблем с IDENTITY не встречал. В смысле, программных проблем. Проблемы были, но логические.
А насчёт метода ApplyUpdates - никогда не пользовался. Ибо с сервером работаю ТОЛЬКО через SP.


 
Ega23 ©   (2004-04-14 14:28) [23]

Да компоненты DB не причем, т.к. я всё в Enterprise"е делаю, без компонент Delphi.

А как ты в Enterprise"е INSERT INTO ... делаешь, если не секрет?


 
Patrick ©   (2004-04-14 14:54) [24]

Какой же тут секрет, если есть там обычный SQL-редактор, когда открываешь таблицу (полный SELECT)


 
bushmen ©   (2004-04-14 14:56) [25]

А ты попробуй непосредственно вводить дданные в сетку Enterprise. Тоже ругаться будет. А через Query Analyser пробовал. И где просимая мной версия сервера?


 
Patrick ©   (2004-04-14 14:58) [26]

B еще дополнение,в один момент как бы всё нормализуется, после Disconnecta и снова Коннекта, и записи добавляются корректно, но стоит запустить климентское приложение, начинается та же фигня, и даже в Manager"е она не дает добавлять руками, пока снова не сделаешь Disconnect.


 
bushmen ©   (2004-04-14 15:04) [27]

Подождите, а Вы Enterprise Manager запускаете на клиенте, т.е. не с машины, на которой стоит SQL Server?


 
sniknik ©   (2004-04-14 15:04) [28]

климентское приложение виновато. не запускай.


 
bushmen ©   (2004-04-14 15:07) [29]

С какими компонентами ты работаешь в клиентском приложении? ADO или BDE ?


 
Patrick ©   (2004-04-14 15:07) [30]

MS SQL-2000, работаю на клиентской машине. и ругается даже тогда , когда работаю через обычную сетку ввода данных.


 
Patrick ©   (2004-04-14 15:10) [31]

Компоненты ADO пробовал, и ADO из библиотеки vg2lib (вроде как достаточно известная)


 
bushmen ©   (2004-04-14 15:42) [32]

А если запустить Enterprise Manager запустить на самом сервере?


 
Ega23 ©   (2004-04-14 15:55) [33]

Что-то здесь не так... В самом деле, чудес не бывает.
Попробуй чётко проперти таблицы посмотреть.


 
Fay ©   (2004-04-14 16:46) [34]

Проверь - что в ключе.
Проверь триггеры.


 
paul_k ©   (2004-04-14 19:02) [35]

1. а ключ не составной ли из нескольких полей?
2. см. 1


 
Fay ©   (2004-04-14 19:06) [36]

2paul_k ©   (14.04.04 19:02) [35]
>> 1. а ключ не составной ли из нескольких полей?
1. Так, конечно, бывает. Но identity - уже возможный ключ, поэтому хоть из 878 полей...
2. см. 3
3. см. 1


 
sniknik ©   (2004-04-14 19:24) [37]

> поэтому хоть из 878 полей...
особенно с tinyint у которого 255 максимум. ;)


 
Fay ©   (2004-04-14 19:35) [38]

2sniknik ©   (14.04.04 19:24) [37]
В случае с IDENTITY  - это пофинг. Даже для tinyint 8)
А вот
Server: Msg 8115, Level 16, State 1, Line 6
Arithmetic overflow error converting IDENTITY to data type tinyint.
Arithmetic overflow occurred.

- это запросто.


 
Patrick ©   (2004-04-15 15:07) [39]

Добрый день! В продолжение вчерашней дисскурсии, наметился один момент, оказывается клиентская часть нипричем, т.к. экспериментирую чисто в Manager"е убираю свойство IDENTITY, сохраняю, заново ставлю это свойство, добавляю запись - работает,
INSERT INTO T1(F2) VALUES ("Новая строка"), в таблице 2 поля F1-integer (IDENTITY (1,1)) и F2 - char(20), добавляю еще запись - сообщение "дублирование ключа", опять изменяю свойство - картина повторяется, а у другой таблички - "структура почти такая же" - всё хорошо, может всё таки кто подскажет, в чем может быть дело?
что еще можно проверить, такое подозрение, что со счетчиком что-то неладное, таблица достаточно простая - никаких триггеров нет.


 
bushmen ©   (2004-04-15 15:41) [40]

>а у другой таблички - "структура почти такая же" - всё хорошо

А если таблицу "убить" и заново создать - глюк повторяется? А у тебя sp3 на SQL Server стоит?


 
sniknik ©   (2004-04-15 15:46) [41]

непонятен конечно смысл этого убирания/установки но проверил как написано, убрал сохранил опять поставил, работает (почти не сомневался) и после 5 инсертов ключь не дублируется (и для инт и для тиниинт).
может конечно у тебя F2 ключом является...

распиши подробно как получить ошибку (по шагам). а то неполучается нифига.


 
Patrick ©   (2004-04-16 08:28) [42]

Добрый день!
Вчера ответить не удалось, Инет у нас срубили, пробовал и таблицу "убивать" и хранимую процедуру (в которой делаю инсерт)естественно тоже, ничего не помогает, ну а подробное описание таково, ну создаю табличку заново. указываю первичный ключ только по полю тиниинт и ставлю идентити по этому полю, далее создаю процедуру, в ней по входным опциям операции для этой таблицы (SELECT,UPDATE,INSERT,DELETE). Ну и потом выполняю эту процедуру для инсерта один раз - нормально, возможно и второй раз нормально, но далее - идет дублирование. Меня заинтересовало предложение по поводу SP3 посмотрел на диске, там отдельно от установки сервака есть SP1 и SP2, а также какие-то Security Hotfix Update (3шт.) различных версий (откровенно не знаю что это такое) и не помню ставили мы их или нет. А вот SP3 там нет, может подскажите где его можно нарыть в Инете.


 
sniknik ©   (2004-04-16 10:42) [43]

ну во первых это не подробное описание.
а во вторых совмещая описание [39] с [42] понял так, что ты делаеш все возможное чтобы запутать MSSQL и нас заодно. (про процедуру сказал только в 42м посте, это как? у тебя цель какая, решить чтото или на судьбу и била пожаловаться? )
извини но проверять это уже ломает (так и не понял последовательность, и в результате уверен на 99.8%, не будет глюка).
кстати смысл программирования не в том чтобы найти глюк в чужом продукте а в написании своего безглючного, даже если приходится обходить дыры разработчика (которых немного кстати говоря и это не из их числа).  

> А вот SP3 там нет, может подскажите где его можно нарыть в Инете.
3 сервис пак затыкает дырку от вируса, в основном. раскопками можно занятся на сайте производителя продукта.


 
bushmen ©   (2004-04-16 10:46) [44]

>3 сервис пак затыкает дырку от вируса, в основном

Он еще много чего делает. В том числе и калечит некоторые вещи :)


 
Patrick ©   (2004-04-16 12:17) [45]

Да нет, моя цель - именно решить проблему, а про хранимую не говорил т.к. там всё прозрачно (наверное), текст создания таблицы и хранимой процедуры привожу ниже, уж не знаю куда пробнее.

CREATE TABLE [dbo].[Fuels] (
[FuelCode] [tinyint] IDENTITY (1, 1) NOT NULL ,
[FuelName] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Fuels] WITH NOCHECK ADD
CONSTRAINT [PK_Fuels] PRIMARY KEY  CLUSTERED
(
 [FuelCode]
)  ON [PRIMARY]
GO

и хранимая

CREATE PROCEDURE dbo.FuelAction
@Option smallint,
@pFuelCode tinyint,
@pFuelName char(5)
AS

BEGIN

IF @Option = 0
SELECT f.FuelCode, f.FuelName
FROM NSI.dbo.Fuels f

BEGIN TRANSACTION

IF @Option = 1
UPDATE NSI.dbo.Fuels
SET FuelName = @pFuelName
WHERE FuelCode = @pFuelCode

IF @Option = 2
INSERT INTO NSI.dbo.Fuels (FuelName)
VALUES (@pFuelName)

IF @Option = 3
IF EXISTS(SELECT * FROM NSI.dbo.Marks WHERE FuelCode = @pFuelCode)
    RAISERROR ( "Удаление невозможно. Данный тип топлива есть в справочнике моделей.", 16, 127)
ELSE
DELETE FROM NSI.dbo.Fuels
WHERE FuelCode = @pFuelCode

IF @Option = 4
DELETE FROM NSI.dbo.Fuels
DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

COMMIT TRANSACTION

END
GO


 
paul_k ©   (2004-04-16 12:47) [46]

А каков тайный смысл строки

> DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

если её коментаришь все работает.

This example forces the current identity value in the jobs table to a value of 30.
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
то есть после выполнения твоей строки у тебя следующий ID  обязан быть 1. вот тебе и ннарушение ключа


 
Patrick ©   (2004-04-16 13:27) [47]

ВСЕМ ПАРДОН ЗА БЕСПОКОЙСТВО и НАПРЯГ. ОШИБКА ОКАЗАЛАСЬ БОЛЕЕ ЧЕМ БАНАЛЬНОЙ - ЗАБЫЛ BEGIN ... END ПОСТАВИТЬ, ЕЩЕ РАЗ ВСЕМ SORRY.


 
bushmen ©   (2004-04-16 13:35) [48]

>Patrick ©  

С тебя по ящику пива для каждого за напрасное беспокойство! :)))


 
Patrick ©   (2004-04-16 14:09) [49]

Обязательно, где встречаемся для совместного пития?


 
sniknik ©   (2004-04-16 14:19) [50]

ну наконец то подробно, но опоздал...


 
paul_k ©   (2004-04-16 14:22) [51]

кстати если вместо
DELETE FROM NSI.dbo.Fuels
DBCC CHECKIDENT("NSI.dbo.Fuels", RESEED, 0);

написать просто
truncate table NSI.dbo.Fuels
будеи эффект тот-же а исполнение быстрее


 
bushmen ©   (2004-04-16 14:38) [52]

>Patrick ©   (16.04.04 14:09) [49]

На УАЗе :)



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.033 c
3-1082314990
Lena19
2004-04-18 23:03
2004.05.16
читать строки отличные от активной


3-1081970454
3APA3A
2004-04-14 23:20
2004.05.16
База не меняет размер...


8-1077452218
Cerber
2004-02-22 15:16
2004.05.16
OpenGL


6-1080373573
<Lamer>
2004-03-27 10:46
2004.05.16
Как узнать IP-адрес


3-1082487136
sergg
2004-04-20 22:52
2004.05.16
Как обойти все объекты в DataModule





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский