引用插入-存储过程- SQL Server 2008



我在。net应用程序工作。这里在我的aspx页面,我有3个标签(即)标签1,标签2,标签3。第一个选项卡包含一些文本框控件,第二个选项卡包含一些组合框控件,第三个选项卡包含一些控件。我想保存所有这三个选项卡控件在SQL数据库三个不同的表。为此只应使用一个存储过程。第一个表的PRIMARY键应该保存在第二个和第三个表中。(比如,引用插入)。这是我的SP.

ALTER PROCEDURE [dbo].[Insert]
(@Name NVARCHAR(50))        
 AS
BEGIN
SET NOCOUNT ON
DECLARE @TableOnePrimaryKey INT
BEGIN
INSERT INTO TABLEONE(Name)
VALUES (@Name)               
SELECT @TableOnePrimaryKey=@@IDENTITY
SELECT CAST(@@IDENTITY AS INT)
INSERT INTO TABLETWO(TableTwoIDColumn)
VALUES (@TableOnePrimaryKey) 
SELECT @TableOnePrimaryKey=@@IDENTITY
SELECT CAST(@@IDENTITY AS INT)
INSERT INTO TABLETHREE(TableThreeIDColumn)
VALUES (@TableOnePrimaryKey)               
SELECT @TableOnePrimaryKey=@@IDENTITY
SELECT CAST(@@IDENTITY AS INT)
INSERT INTO TABLEFOUR(TableFourIDColumn)
VALUES (@TableOnePrimaryKey)  
END

但是,它的TABLE ONE主键不会被保存在其他表中。

scope_identity()代替@@identity。并且您不应该将值赋给@TableOnePrimaryKey超过一次。如果在其他表中有标识列,则会丢失第一次插入时获得的标识。

ALTER PROCEDURE [dbo].[Insert]
(@Name NVARCHAR(50))        
 AS
BEGIN
  SET NOCOUNT ON
  DECLARE @TableOnePrimaryKey INT
  INSERT INTO TABLEONE(Name)
  VALUES (@Name)               
  SET @TableOnePrimaryKey=SCOPE_IDENTITY()
  INSERT INTO TABLETWO(TableTwoIDColumn)
  VALUES (@TableOnePrimaryKey) 
  INSERT INTO TABLETHREE(TableThreeIDColumn)
  VALUES (@TableOnePrimaryKey)               
  INSERT INTO TABLEFOUR(TableFourIDColumn)
  VALUES (@TableOnePrimaryKey)  
END

我将使用scope_identity超过identity。

源自http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

"以避免与添加触发器相关的潜在问题之后,总是使用SCOPE_IDENTITY()返回对象的标识SQL语句或存储过程中最近添加的行。"

试一下,看看是否能解决你的问题。

编辑:我想说的是,我认为你需要设置不同的变量。

SET @TableOnePrimaryKey = (SELECT SCOPE_IDENTITY())
SELECT CAST(@TableOnePrimaryKey AS INT)

等等

最新更新