2012-04-19 59 views
1

我的程序是:拆分并保存在SQL Server

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表,其中列postidtag。但无法在tag表中插入值。意思是,如果postid=2我想要这样的结果。

标签

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

感谢。

回答

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_或没有前缀,所有...

+0

感谢suggestion.I通过'SCOPE_IDENTITY取得帖子ID() '但是我怎么可以拆分数据'C#,ASP。 net,mvc'并插入到'Tag'表中。 – 2012-04-19 05:15:50

+0

@ShreeKhanal:这里有**的帖子** - 只需Google或Bing就可以了!或者看看[这个其他SO问题](http://stackoverflow.com/questions/2647/split-string-in-sql)与几个有用的链接.... – 2012-04-19 05:17:11