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具有列postid和的表中tagtag但无法在表中插入值。意味着如果postid=2我想要这样的结果。

表格标签

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

谢谢。

4

1 回答 1

0

您需要获取最新插入的标识值,然后在第二次插入中使用它:

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_前缀。这是微软为自己保留的前缀。这有可能无法正常工作,或者可能导致速度下降。我会避免使用sp_前缀 - 使用类似proc_或不使用所有前缀的东西......

于 2012-04-19T05:02:30.210 回答