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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
8-7566
Link-ov
2003-03-20 16:06
2003.07.03
печать DBChart


11-7372
SPeller
2002-10-10 15:54
2003.07.03
ShowModal


3-7309
yaric
2003-06-09 09:10
2003.07.03
События в Interbase


8-7555
Программер Михаил
2003-03-20 17:29
2003.07.03
Как конвертировать из TJPEGImage в TDIB??


14-7595
Zergling
2003-06-17 06:47
2003.07.03
Русский набор символов в Rave Report





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский