0
나는 채널 목록을 가지고 있습니다. 이 중 하나가있을 경우 사용할 수있는 하나를 사용하여 세션에 할당해야합니다. 사용할 수있는 것들이 남아 있지 않으면 새로운 것을 생성하고 그것을 세션에 할당하고, 호출 루틴이 그것이 새로운 채널이라는 것을 알게해야합니다.SQL atomic 목록에서 사용하지 않은 항목을 선택하고 다른 테이블에 할당합니다.
나는 작동하는 것처럼 보이는 다음과 같은 구현이 있지만, 더 나은 방법이 있는지 궁금합니다.
추신. 이것은 SQL 2000에 있습니다. 그렇지 않으면 update 문의 output 절을 사용하려고했을 것입니다.
create procedure [dbo].[ReserveChannelSession]
(
@ID int output
,@ApplicationID int
,@ChannelID int output
,@IsNewChannel bit output
)
as
begin
begin transaction
set nocount on
set @ChannelID = (select top 1 [ID] from [dbo].[Channels] with (updlock,holdlock) where [InUse] = 0)
if @ChannelID is null
begin
exec InsertChannel @ID = @ChannelID output , @InUse = 1 -- create as reserved in use
set @IsNewChannel = 1;
end else begin
update [dbo].[Channels] set [InUse] = 1 where [ID] = @ChannelID
set @IsNewChannel = 0;
end
set nocount off
if @ChannelID is not null
begin
insert into [dbo].[ChannelSessions] (
[ApplicationID]
,[ChannelID]
) values (
@ApplicationID
,@ChannelID
)
set @ID=SCOPE_IDENTITY()
end
commit transaction
end
감사합니다. 그게 내가 필요로했던 것과 똑같은 트릭을 만들어 냈다. –