1

私の手順は次のとおりです。

CREATE PROCEDURE [dbo].[sp_SavePost]
    @PostTitle NVARCHAR(max),
    @PostDescription NVARCHAR(max),
    @PostDate DATETIME,
    @Author NVARCHAR(100),
    @Tag NVARCHAR(250), --it bring c#,asp.net,mvc
    @Category NVARCHAR(250)
AS
BEGIN
   INSERT INTO [dbo].[ForumPost](PostTitle, PostDescription, PostDate,
                                 Author, Tag, Category)
   VALUES(@PostTitle, @PostDescription, @PostDate,
          @Author, @Tag, @Category)
END

テーブル[dbo].[ForumPost]postidは自動インクリメントがあります。と呼ばれる別のテーブルがありTagます。同じ手順で、列と。Tagを持つテーブルに値を挿入したいと思います。しかし、テーブルに値を挿入できません。このような結果が必要な場合を意味します。postidtagtagpostid=2

テーブルタグ

postid | tag
------------
2      | c#
2      | asp.net
2      |  mvc

ありがとう。

4

1 に答える 1

0

最後に挿入されたID値を取得し、それを2番目の挿入で使用する必要があります。

CREATE PROCEDURE [dbo].[sp_SavePost]
  .....
AS
BEGIN
   INSERT INTO [dbo].[ForumPost](PostTitle, PostDescription, PostDate,
                                 Author, Tag, Category)
   VALUES(@PostTitle, @PostDescription, @PostDate,
          @Author, @Tag, @Category)

   -- declare variable to hold newly inserted IDENTITY value
   DECLARE @NewPostID INT

   -- fetch the newly inserted IDENTITY value
   SELECT @NewPostID = SCOPE_IDENTITY()

   -- use that value in the next INSERT into the "Tag" table
   INSERT INTO dbo.Tag(PostId, ......)
   VALUES(@NewPostID, .......)
END

補足として:ストアドプロシージャにプレフィックスを使用しないでください。sp_これは、Microsoftが独自に使用するために予約したプレフィックスです。これが適切に機能しない、または速度低下を引き起こす可能性があるというリスクがあります。私は接頭辞を避けsp_ます-接頭辞のようなものを使用するか、接頭辞を使用proc_しないでください...

于 2012-04-19T05:02:30.210 に答える