Surgeon2000
Дата: 11.09.2006 19:47:46
Студенту помощь нужна :)В универе задали задание.
CREATE PROCEDURE ident_lastID
@Log_id INT OUTPUT - входной и выходной параметр
as
DECLARE @DocID INT
SELECT @DocID = doc_id - здесь я хочу присвоить @DOCID значение поля
FROM logdok - имя таблицы
WHERE logdok_id = @Log_id - критерий поиска
SET @Log_id = @DocID
GO
это создает ХП
далее для проверки ввожу
INSERT INTO LOGDOK
values (1,'10.12.2004',1,37461,'д')
DECLARE @ID INT
SELECT @@IDENTITY as id
EXEC ident_lastID @ID
PRINT CONVERT(CHAR(5),@ID)
go
по замыслу процедура должна вернуть цифру 37461 в переменной @ID
но выводит последний ID последней занесенной строки в LogDok,т.е. то значение которое возврыщает нам @@IDENTITY.
Не могу понять в чем ошибка
Prolog
Дата: 12.09.2006 16:04:24
outpuit обязательно нужно. Далее смотрим:
DECLARE @ID INT
SELECT @@IDENTITY as id
EXEC ident_lastID @ID output
в процедуру передается значение @ID равное null
В процедуре
DECLARE @DocID INT
SELECT @DocID = doc_id
FROM logdok
WHERE logdok_id = @Log_id
@Log_id у тебя null, поэтому и @DocID будет null. А далше SET @Log_id = @DocID и PRINT CONVERT(CHAR(5),@ID) распечатают null, т.е. ничего не распечатают.
Surgeon2000
Дата: 12.09.2006 17:26:26
Я понимаю что у меня передается значение NULL,т.к. ошибка 99% в синтаксисе,который я не освоил просто,только начал изучать язык Transact-SQL.Т.е. я думаю здесь тоже согласны что ХП написана правильно,но я не правильно передаю значение которое возвращает @@IDENTITY.
Вот как передать его так чтобы было не NULL?Почему после этого
SELECT @@IDENTITY as id
все равно NULL?
Ведь если я так делаю,то Query Analyzer внизу мне выдает
ID
1 128577
а это есть ключ к последней введенной строке в таблицу LOGDOK
т.е. то что появилось после
INSERT INTO LOGDOK
values (1,'10.12.2004',1,37461,'д')
!!!! Значит не NULL ?
Значит в процедуру не так передаю?
По поводу
return @Log_id go
помоему это вообще не надо,т.к. в хелпе написано что OUTPUT делает параметр не только входным,но и выходным.
Если кто может,то объясните как правильно надо!
Glory
Дата: 12.09.2006 17:34:52
Вот как передать его так чтобы было не NULL?Почему после этого
SELECT @@IDENTITY as id
все равно NULL?
Потому, что так возвращают набор данных клиентскому приложению.
А для присваивания значению локальной переменной сервера нужен другой синтакисис