Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 参考插入-存储过程-SQL Server 2008_Sql Server 2008 - Fatal编程技术网

Sql server 2008 参考插入-存储过程-SQL Server 2008

Sql server 2008 参考插入-存储过程-SQL Server 2008,sql-server-2008,Sql Server 2008,我在.Net应用程序中工作。在我的aspx页面中,我有3个选项卡,即选项卡1、选项卡2、选项卡3。第一个选项卡包含一些文本框控件,第二个选项卡包含一些组合框控件,第三个选项卡包含一些控件。我想将所有这三个选项卡控件保存到SQL数据库中的三个不同表中。此操作只能使用一个存储过程。第一个表的主键应保存在第二个和第三个表中。比如,引用插入。这是我的书信 ALTER PROCEDURE [dbo].[Insert] (@Name NVARCHAR(50)) AS BEGIN SET N

我在.Net应用程序中工作。在我的aspx页面中,我有3个选项卡,即选项卡1、选项卡2、选项卡3。第一个选项卡包含一些文本框控件,第二个选项卡包含一些组合框控件,第三个选项卡包含一些控件。我想将所有这三个选项卡控件保存到SQL数据库中的三个不同表中。此操作只能使用一个存储过程。第一个表的主键应保存在第二个和第三个表中。比如,引用插入。这是我的书信

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

但是,表1主键没有保存在其他表中。如何解决这个问题。

我将使用范围\标识而不是标识

避免与添加触发器相关的潜在问题 稍后,始终使用SCOPE_IDENTITY返回 最近在T SQL语句或存储过程中添加的行

尝试一下,看看它是否能解决您的问题

编辑:我想说的是,我认为您需要以不同的方式设置变量。尝试以下方法

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

使用代替。并且不应多次将该值赋给@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