我的程序是:
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
表中插入一个值,该表包含列Tag
和postid
。但无法在tag
表中插入值。意味着tag
我想要这样的结果。
表标记
postid=2
感谢。
答案 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_
的内容或不使用前缀...