Нужна помощь с маааленькой ХП :)

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.

Не могу понять в чем ошибка
Glory
Дата: 11.09.2006 19:57:35
EXEC ident_lastID @ID OUTPUT
Surgeon2000
Дата: 12.09.2006 14:42:44
Добавление слова OUTPUT не меняет абсолютно ничего
tpg
Дата: 12.09.2006 14:48:11
Surgeon2000
Добавление слова OUTPUT не меняет абсолютно ничего
Вот такой скрипт
select 1
print 2
что вернет?
MsDatabaseru
Дата: 12.09.2006 15:32:02
return @Log_id
go
Prolog
Дата: 12.09.2006 15:59:56
outpuit обязательно нужно. Далее смотрим:
DECLARE @ID INT
SELECT @@IDENTITY as id
EXEC ident_lastID @ID
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, т.е. ничего не распечатают.
Олег Ворбчиков
Дата: 12.09.2006 16:24:03
Может правильней будет
SELECT @ID = @@IDENTITY
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?

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