0

テーブル チャネルにレコードが追加されるクエリがあります。そこにある各レコードには、テーブルの PK である channelID が割り当てられ、自動インクリメントされます。レコードがチャネル テーブルに追加された後、そのレコードに関連付けられた文字列をチャネル キーワードと呼ばれる別のテーブルに挿入したいと考えています。私の問題は、前のクエリで作成した channelID を、channelskeywords テーブルの挿入ステートメントのパラメーターとして渡す必要があることですが、これを行う方法がよくわかりません。

    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

このようなことを試してください

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すべてのスコープにわたって、現在のセッションの任意のテーブルに対して生成された最後の ID 値を返します。範囲をまたいでいるので注意が必要です。現在のステートメントではなく、トリガーから値を取得できます。

  • SCOPE_IDENTITY現在のセッションと現在のスコープで任意のテーブルに対して生成された最後の ID 値を返します。一般的に使用したいもの。

  • IDENT_CURRENT任意のセッションおよび任意のスコープで特定のテーブルに対して生成された最後の ID 値を返します。これにより、上記の 2 つが必要なものではない場合 (非常にまれ) に、どのテーブルから値を取得するかを指定できます。

こちらもご覧ください

于 2012-08-22T15:06:47.890 に答える
0

でIDを取得できます

Select Scope_Identity() 

すなわち:

insert into channels 
(userID,matchTitle,matchTitleAbstract, fromMyPage) 
values 
(@userID,1,0,@fromMyPage) 
select @ChannelID = Scope_Identity()
于 2012-08-22T15:04:54.270 に答える