2012-08-22 30 views
0

我有一个查询将记录添加到表格通道。然后为每个记录分配一个channelID,它是表格的PK,并自动递增。将记录添加到频道表后,我想将与该记录关联的字符串插入另一个名为频道关键字的表中。我的问题是,我还需要传递在前一个查询中创建的channelID作为channelskeywords表的插入语句的参数,但我不太确定如何执行此操作。如何引用新插入的行的PK

IF @matchBy ='title' 
    BEGIN 
    insert into channels 
    (userID,matchTitle,matchTitleAbstract, fromMyPage) 
    values 
    (@userID,1,0,@fromMyPage) 


    END 

    IF @matchBy ='TitleAbstract' 
    insert into channels 
    (userID,matchTitle,matchTitleAbstract, fromMyPage) 
    values 
    (@userID,0,1,@fromMyPage) 
    BEGIN 

    IF (NULLIF(@keyword1, '')) IS NOT NULL 
    insert into channelsKeywords 

回答

0

尝试是这样的

BEGIN 
    -- be sure to declare this same scope as the one whol will be using the value 
    DECLARE @CNT INT 

    insert into channels (userID,matchTitle,matchTitleAbstract, fromMyPage) 
    values (@userID,1,0,@fromMyPage) 

    SET @CNT = Scope_Identity() -- holds the value of the inserted ID 

END 

附加信息:

  • @@IDENTITY返回在当前会话中的所有表中为所有作用域生成的最后一个标识值。你需要在这里小心,因为它跨越了范围。您可以从触发器中获取值,而不是当前的语句。

  • SCOPE_IDENTITY返回为当前会话中的任何表和当前范围生成的最后一个标识值。一般你想用什么。

  • IDENT_CURRENT返回为任何会话和任何范围中的特定表生成的最后一个标识值。这可以让你指定你想从哪个表中获得值,以防上述两者不是你所需要的(非常少见)。

See also here

+0

这奏效了,感谢您的帮助和附加信息! – xxyyxx

0

您可以通过

Select Scope_Identity() 

获得ID即:

insert into channels 
(userID,matchTitle,matchTitleAbstract, fromMyPage) 
values 
(@userID,1,0,@fromMyPage) 
select @ChannelID = Scope_Identity()