0

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

    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
4

2 回答 2

0

您可以通过以下方式获取 id

Select Scope_Identity() 

IE:

insert into channels 
(userID,matchTitle,matchTitleAbstract, fromMyPage) 
values 
(@userID,1,0,@fromMyPage) 
select @ChannelID = Scope_Identity()
于 2012-08-22T15:04:54.270 回答
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返回为任何会话和任何范围内的特定表生成的最后一个标识值。这使您可以指定要从哪个表中获取值,以防上述两个不是您所需要的(非常罕见)。

另请参阅此处

于 2012-08-22T15:06:47.890 回答