![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Генератор в MSSQL. Бьюсь уже 2-а дня. [MSSQL]
DmitrichJ © (2007-03-07 14:12:00)Добрых суток, мастера.Уже 2 дня тем и занимаюсь чтением sql.ru для того чтобы сделать элементарную задачу. Генератор на подобии в InterBase, но ничего не получается.
Задача сделать уникальное значение ID для добавлении записи в нескоко таблиц.
Дошёл до того, что создал процедуру:
CREATE PROC GEN_ID
@org VARCHAR (200),
@tporg VARCHAR (200),
@vid_deiat VARCHAR (200),
@rot INT,
@reiting INT,
@metro VARCHAR (200),
@adres VARCHAR (200),
@prim VARCHAR (200),
@NewID INT OUTPUT
AS
INSERT INTO ORGANIZATION(ORG,TPORG,VID,ROT,REITING,METRO,ADRES,PRIM)
VALUES(@org,@tporg,@vid_deiat,@rot,@reiting,@metro,@adres,@prim)
SET @NewID = SCOPE_IDENTITY()
GO
для того чтобы после вставки записи получить последнее значение IDENTITY, но немогу подключить процедуру через StoredProc1!!! Пишет, что не может найти процедуру, хотя одключаю к БД правильно, и он определяет все переменные верно.
В общем спасите!
Stanislav (2007-03-07 15:23:00) [21]'GEN_ID;1' нужно GEN_ID
DmitrichJ (2007-03-07 15:20:00) [22]sniknik, я в этом деле новенький....
Это
DECLARE @ID INT
EXEC GEN_ID @ID OUTPUT
SELECT @ID
в Query писать?
DmitrichJ (2007-03-07 15:13:00) [23]Это база для организации iren.
sniknik (2007-03-07 15:13:00) [24]> Генератор на подобии в InterBase
вообще "кривая" задача, логика mssql отлична от IB, а писать надо в соответствии с той что у используемого...
ну а на "кривую" логику кривое же и решение... ;о))
сначала делаешь таблицу типа аналог переменной генератора в ib (ну нет в MSSQL подобных)
CREATE TABLE ValGenID (ID INT Identity(1, 1))
создаешь процедуру (лучше бы конечно функцию, удобнее былобы, но там есть ограничения... вроде бы в 2005м можно/обходятся, только я к примеру все еще 2000 использую)
CREATE PROCEDURE GEN_ID
@NewID INT OUTPUT
AS
SET NOCOUNT ON
INSERT INTO ValGenID DEFAULT VALUES
SELECT @NewID=@@Identity
DELETE FROM ValGenID
SET NOCOUNT OFF
используешь
DECLARE @ID INT
EXEC GEN_ID @ID OUTPUT
SELECT @ID
сдесь просто вывод(select) полученного, но можно и в пакет с инсертом добавлять... использовать полученное значение в нем. (была бы функция было бы INSERT INTO .... VALUES (GEN_ID(), ....), просто мечта! ;))
> но немогу подключить процедуру через StoredProc1!!!
клево. и правильно. не используй StoredProc... (в принципе можно предположить почему... разобраться. но зачем сломанному "костылику" дощечки набивать, ремонт делать? проще выкинуть)
Правильный Вася (2007-03-07 15:10:00) [25]автор DmitrichJ а база iren_76
DmitrichJ (2007-03-07 15:09:00) [26]Проблема больше не в процедуре, а в задаче. Можно ли решить это без процедур и функций?
DmitrichJ (2007-03-07 15:05:00) [27]Delphi 2006,BDE:
MainForm.StoredProc1.DatabaseName:='iren_76';
MainForm.StoredProc1.StoredProcName:='GEN_ID;1';
MainForm.StoredProc1.Params[1].ParamType:=ptInput;//@org
...
MainForm.StoredProc1.Params[9].ParamType:=ptOutput;//@new_id
// ну или всё это только в компоненте
MainForm.StoredProc1.ExecProc;
Ошибка:Cuold not find stored proceddure 'dbo.GEN_ID;1'
stud (2007-03-07 14:52:00) [28]тогда текст ошибки давай, компаненты доступа и т.п.
DmitrichJ (2007-03-07 14:49:00) [29]Плохиш, в StoredProc.DataBaseName указываю имя БД правильно, В StoredProcName имя процедуры видит нормально dbo.Gen_id;1, параметры все видит, но при выполнении говорит, что не может найти.
Плохиш (2007-03-07 14:42:00) [30]
> для того чтобы после вставки записи получить последнее значение
> IDENTITY, но немогу подключить процедуру через StoredProc1!
Значит создаёшь подключение к другой базе данных...