拆分并保存在SQL Server中

时间:2012-04-19 03:58:09

标签: sql-server stored-procedures

我的程序是:

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]的{​​{1}}是自动增量。还有另一个名为postid的表。在同一过程中,我想在Tag表中插入一个值,该表包含列Tagpostid。但无法在tag表中插入值。意味着tag我想要这样的结果。

标记

postid=2

感谢。

1 个答案:

答案 0 :(得分: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_的内容或不使用前缀...