Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Аналог генератора в   Найти похожие ветки 

 
Shaman ©   (2003-06-06 18:47) [0]

Уважаемые, подскажите как в MSSQL организовать что-то вроде генератора Interbase - функцию, возвращающую значение типа INT и которую можно было бы подставить в SELECT?
Там есть нечто подобное - функция NEWID(), но она возвращает GUID - слишком уж большое значение получается


 
sniknik ©   (2003-06-06 18:58) [1]

Автоинкремент?

(не знаю Interbase, так что функцию на которую ссылаешся не предстакляю) зачем нужно? ее принцип.


 
MOA ©   (2003-06-06 19:02) [2]

Есть ещё поля IDENTITY - это как раз целые. Но если Вы собираетесь реплицировать базу(ы) - по сравнению с GUID будет некоторый (и приличный) гемморой, если заранее не принять меры.
А способов сотворить генератор порядочно - зависит от фантазии. Удачи!


 
Shaman ©   (2003-06-06 19:04) [3]

Хочу сделать, во-первых, чтобы значение первичных ключей было уникальным не только в пределах таблицы, но и в пределах всей базы, во-вторых хочу сночала получить значение ключевого поля для новой записи, а потом только давать команду INSERT, чтобы не искать потом ID новой записи черт знает как.


 
sniknik ©   (2003-06-06 19:10) [4]

заведи таблицу и одного поля с автоинкрементом и получай из нее значения для всей базы.


 
Shaman ©   (2003-06-06 19:14) [5]

Я так и сделал сначала, но получать новое значение можно только при помощи хранимой процедуры, а при помощи определяемой пользователем функции - никак. А в select или insert вызов хранимой процедуры вставить не получается.


 
sniknik ©   (2003-06-06 19:29) [6]

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


 
Shaman ©   (2003-06-06 19:40) [7]

В функции нельзя выполнять INSERT, UPDATE, DELETE и EXEC. Не пускает собака такие команды, что только ей не делай. Если я ошибаюсь, то подскажите, где я неправ, буду очень благодарен.


 
sniknik ©   (2003-06-06 22:53) [8]

точно, не получилось. (странно в хелпе по функциям такие ограничения должны на первом месте стоять), впрочем для EXEC есть исключение "Only functions and extended stored procedures can be executed from within a function"

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


 
sniknik ©   (2003-06-06 23:08) [9]

да, только внешнюю писать это упаришся, а чего не не обойтись тем что есть?. ты же можеш в одном пакете кучу команд посылать в том числе и с IDENTITY
будет выглядеть вроде
INSERT INTO GlId (Icr) VALUES (0) --таблица с автоикрементным полем и с "пустышкой"
INSERT INTO TableDate (ID, ....) VALUES (@@IDENTITY, ....)
GO
выполнять в одном пакете, ADOCommand.Execute, для каждой таблици с глабальным идентификатором. согласен не так удобно как имей такую функцию но... (с внешней будет гораздо сложнее. писать устанавливать ...)



 
Shaman ©   (2003-06-07 14:36) [10]

Спасибо, попробую в этом направлении покопать, но это решение, кажется, не самое красивое - загромождает код сильно, но лучше так, чем ничего. Спасибо.



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

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-7318
abc
2003-06-08 23:52
2003.07.03
как сделать так что бы при вводе данных в DBGrid первая буква...


6-7573
Gremlin
2003-04-25 13:03
2003.07.03
Связка ActiveX и WEB - проблемы!


14-7660
marconi8
2003-06-11 22:51
2003.07.03
удалить файл, если pc внезапно вырубился


14-7704
Mor
2003-06-15 15:08
2003.07.03
e-mail


1-7525
del
2003-06-21 23:37
2003.07.03
Как по хэндлу главного окна определить exeName?