![](/img/trans.png)
[英]Insert Data to Master/Detail table in SQL Server 2005 from C# with Foreign key in Detail table
[英]SQL Server and C# Master / Detail Insert
我正在創建將從我的C#應用程序中調用的存儲過程,並將在SQL Server中輸入主/詳細信息。 在頁眉表上,我將TransactionId
作為“身份”列,以便每次插入時都獲得唯一的ID。 當我為明細表調用存儲過程時,我想使用標頭中的PK ID並將其插入到明細表的FK中。 確保獲得標頭表中剛創建的ID的最佳方法是什么?
CREATE TABLE [dbo].[Header835]
(
[TRANSACTIONID] [int] IDENTITY(1, 1) NOT NULL
, [FILENAME] [varchar](80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
, [TRADINGPARTNERNAME] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
, [ISACRTL] [numeric](18, 0) NOT NULL
, [STCRTL] [numeric](18, 0) NOT NULL
, CONSTRAINT [PK_Header835] PRIMARY KEY CLUSTERED
(
[TRANSACTIONID] ASC
) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
您將想要使用SCOPE_IDENTITY()
DECLARE @headerTransactionId INT;
INSERT INTO dbo.Header835(Filename, TradingPartnerName, IsACrtl, StCrtl)
SELECT 'myFile.txt', 'Joe', 103, 123;
SELECT @headerTransactionId = SCOPE_IDENTITY();
SQL小提琴示例
在這里查看有關不同方法的博客文章,並了解其優缺點:
http://sqlity.net/en/351/identity-crisis/
簡而言之,您希望您的代碼如下所示:
DECLARE @IdentValues TABLE(v INT);
INSERT INTO [dbo].[Header835](<... column list ...>)
OUTPUT INSERTED.[TRANSACTIONID] INTO @IdentValues(v)
VALUES(<... value list ...>);
SELECT v AS IdentityValues FROM @IdentValues;
在Header835表中插入一條記錄后,您將獲得帶有SELECT @@ IDENTITY或SELECT SCOPE_IDENTITY()的TransactionId的自動生成的身份值,這兩者都將返回您會話中最后一個自動生成的身份。 然后,您可以在明細記錄的外鍵中使用此值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.