2011-11-21 65 views
0

我在.Net應用程序中工作。在我的aspx頁面中,我有3個選項卡(即)選項卡1,選項卡2,選項卡3.第一個選項卡包含一些文本框控件,第二選項卡包含一些組合框控件和第三選項卡包含一些控件。我想將所有這三個選項卡控件保存到SQL數據庫中的三個不同的表中。只有一個存儲過程應該用於此。 FIRST表的PRIMARY KEY應保存在SECOND和THIRD表中。 (LIKE,參考插入)。這是我的SP ...引用插入 - 存儲過程 - SQL Server 2008

ALTER PROCEDURE [dbo].[Insert] 
(@Name NVARCHAR(50))   
AS 
BEGIN 
SET NOCOUNT ON 
DECLARE @TableOnePrimaryKey INT 

BEGIN 

INSERT INTO TABLEONE(Name) 
VALUES (@Name)    

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLETWO(TableTwoIDColumn) 
VALUES (@TableOnePrimaryKey) 

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLETHREE(TableThreeIDColumn) 
VALUES (@TableOnePrimaryKey)    

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLEFOUR(TableFourIDColumn) 
VALUES (@TableOnePrimaryKey) 

END 

但是,它的TABLE ONE主鍵沒有被保存在其他表中。如何解決此問題..

回答

0

使用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 
0

我會使用scope_identity over 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()返回 最近添加的行的身份在你的T SQL語句或存儲過程「。

試試看看它是否解決了您的問題。

編輯:我想說的是,我認爲你需要設置不同的變量。嘗試以下方法;

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

等等等等