хранимая процедура

shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

хранимая процедура

Post by shadow7256 »

Скажите пожалуйста, все ли нормально в данной хранимой процедуре.

CREATE Procedure dbo.InsertStory
(
@StoryID varchar(50) ,
@SourceID varchar (10),
@Source varchar (2),
@header text,
@body text,
@Result varchar(20) = null OUTPUT
)
As
declare @decID decimal

insert into Stories (StoryID, SourceID, Source, header,body)
values (@StoryID, @SourceID, @Source, @header,@body)

select @decID = @@IDENTITY
select @Result = convert(varchar(20),@decID)
return (1)
GO


Запись вставляется нормально, но возвращается неправильное значение IDENTITY, никак не возвращается правильное:( Работаю с базой через DB Library for C.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

ВРоде нормально
А как Вы ее вызываете ? ПРи вызове тоже надо указывать output
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: хранимая процедура

Post by katit »

shadow7256 wrote:Скажите пожалуйста, все ли нормально в данной хранимой процедуре.



Вряд-ли ЭТО проблема. Но Just in case
всегда используйте SCOPE_IDENTITY
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Правильное замечание
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Post by Слiн »

А триггера на stories нету какого-нибудь, который еще куда-нибудь что-нибудь вставляет?

И есть ли identity-поле в stories? ;)
Last edited by Слiн on 12 May 2004 20:39, edited 1 time in total.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: хранимая процедура

Post by shadow7256 »

katit wrote:
shadow7256 wrote:Скажите пожалуйста, все ли нормально в данной хранимой процедуре.



Вряд-ли ЭТО проблема. Но Just in case
всегда используйте SCOPE_IDENTITY


Хм, поменял на SCOPE и заработало :? Странно.. раньше работало и с IDENTITY но вдруг ни с того ни с сего перестало.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

Слiн wrote:А триггера на stories нету какого-нибудь, который еще куда-нибудь что-нибудь вставляет?


есть наверное. Дело в том, что я проинсталлировал софт от компании IMP, ихний софт заменяет сиквельный full text search и работает быстрее намного. Так судя по документации, эта софтина устанавливает тригера на вставку записей, обновление и удаление, чтобы своевременно обновлять индекс.

Вы думаете это причина? А почему тогда работает со SCOPE?
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Re: хранимая процедура

Post by Слiн »

shadow7256 wrote:Хм, поменял на SCOPE и заработало :? Странно.. раньше работало и с IDENTITY но вдруг ни с того ни с сего перестало.


Кто-то небось триггер добавил тайком.
Найти и наказать негодяя!
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Post by Слiн »

shadow7256 wrote:
Вы думаете это причина? А почему тогда работает со SCOPE?


http://msdn.microsoft.com/library/defau ... s_6n8p.asp

For example, you have two tables, T1 and T2, and an INSERT trigger defined on T1. When a row is inserted to T1, the trigger fires and inserts a row in T2. This scenario illustrates two scopes: the insert on T1, and the insert on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and SCOPE_IDENTITY will return different values at the end of an INSERT statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across any scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which was the last INSERT that occurred in the same scope. The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

спасибо огромное :) Очень, очень полезная информация. Щас же побегу читать SQL Server Unleashed :) А то купили мне, а я даже не читал.

Return to “Вопросы и новости IT”