2015-11-01 35 views
2

我想從Customer表中將我的CustId(主鍵)添加到CustomerAddress表中的CustID(外鍵)中。但我無法自動添加外鍵。我該怎麼辦。下面是我的架構(我從我的SQL Server實例複製的話)將數據插入如何將一個表中的主(代理)鍵添加到另一個表的外鍵中?

CREATE TABLE [dbo].[Customers] 
(
      [CustId]   INT   IDENTITY (1, 1) NOT NULL, 
      [FirstName]  NVARCHAR (50) NOT NULL, 
      [MiddleName]  NVARCHAR (50) NULL, 
      [LastName]   NVARCHAR (50) NOT NULL, 
      [Salutation]  NVARCHAR (10) NULL, 
      [Position]   NVARCHAR (50) NULL, 
      [OrganizationType] NVARCHAR (50) NULL, 
      [PhoneNumber]  NVARCHAR (50) NOT NULL, 
      [Ext]    NCHAR (10) NULL, 
      [FaxNumber]  NVARCHAR (50) NULL, 
      [CellNumber]  NVARCHAR (50) NULL, 
      [EmailAddress]  NVARCHAR (50) NOT NULL, 
      [EmailPermission] NCHAR (10) NOT NULL, 
      [Password]   NVARCHAR (50) NOT NULL, 
      PRIMARY KEY CLUSTERED ([CustId] ASC) 
); 

CREATE TABLE [dbo].[CustomerAddress] 
(
      [AddressID] INT NOT NULL IDENTITY (1, 1), 
      [CustID]   INT, 
      [OrganizationName] NVARCHAR (50) NOT NULL, 
      [Division]   NVARCHAR (50) NULL, 
      [Department]  NVARCHAR (50) NOT NULL, 
      [BuildingRoom]  NVARCHAR (50) NULL, 
      [Street]   NVARCHAR (50) NULL, 
      [City]    NVARCHAR (50) NULL, 
      [POBox]   NVARCHAR (50) NULL, 
      [Province]   NVARCHAR (50) NULL, 
      [PostalCode]  NCHAR (10) NOT NULL, 
      [Country]   NVARCHAR (30) NOT NULL, 
      [AddressType]  CHAR (10)  NOT NULL, 
      PRIMARY KEY CLUSTERED ([AddressID]), 
      CONSTRAINT [FK_CustID] FOREIGN KEY ([CustID]) REFERENCES [dbo].[Customers] ([CustId]) 
); 

C#代碼:

public int AddCustomerDeliveryAddress(CustomerAddressBLL NewCustomerDeliveryAddressBLL) 
{ 
      string sql = string.Format(@"Insert into CustomerAddress (OrganizationName,Division,Department,BuildingRoom,Street,City,POBox,Province,PostalCode,Country,AddressType) 
         Values(@OrganizationName,@Division,@Department,@BuildingRoom,@Street,@City,@POBox,@Province,@PostalCode,@Country,@AddressType)"); 

      db.AddParameter("@OrganizationName", NewCustomerDeliveryAddressBLL.Organization); 
      db.AddParameter("@Division", NewCustomerDeliveryAddressBLL.Division); 
      db.AddParameter("@Department", NewCustomerDeliveryAddressBLL.Department); 
      db.AddParameter("@BuildingRoom", NewCustomerDeliveryAddressBLL.BuildingRoom); 
      db.AddParameter("@Street", NewCustomerDeliveryAddressBLL.Street); 
      db.AddParameter("@City", NewCustomerDeliveryAddressBLL.City); 
      db.AddParameter("@POBox", NewCustomerDeliveryAddressBLL.PoBox); 
      db.AddParameter("@Province", NewCustomerDeliveryAddressBLL.Province); 
      db.AddParameter("@PostalCode", NewCustomerDeliveryAddressBLL.PostalCode); 
      db.AddParameter("@Country", NewCustomerDeliveryAddressBLL.Country); 
      db.AddParameter("@AddressType", NewCustomerDeliveryAddressBLL.AddressType); 

      return db.ExecuteNonQuery(sql); 
} 
+0

我使用註冊表單添加這些值。 –

+0

就我所見,結構看起來很好 - 你的問題是什麼,你的實際**問題**是什麼? –

+0

@marc_s我想根據Customer Table中的CustID自動將相同的Foreignkey值添加到CustomerAddress中的CustID中。因爲我不知道在外鍵表中給出什麼值 –

回答

2

如果在 「純」 T-SQL做到這一點,你需要使用代碼是這樣的:

-- declare variable for your identity 
DECLARE @NewCustId INT; 

-- insert into your Customers table 
INSERT INTO dbo.Customers([FirstName], [MiddleName], [LastName], ......) 
VALUES ('John', 'Robert', 'Doe', ........); 

-- get the newly inserted Identity value 
SET @NewCustId = SCOPE_IDENTITY(); 

-- insert into CustomerAddress table 
INSERT INTO dbo.CustomerAddress ([CustID], [OrganizationName], [Division], ......) 
VALUES(@NewCustId, 'Orgname', 'Division', .....) 

更新: OK,這是C#代碼 - 你需要去改變它包括SELECT SCOPE_IDENTITY()末:

string sql = string.Format(@"INSERT INTO dbo.CustomerAddress (OrganizationName, Division, Department, BuildingRoom, Street, City, POBox, Province, PostalCode, Country, AddressType) 
          VALUES (@OrganizationName, @Division, @Department, @BuildingRoom, @Street, @City, @POBox, @Province, @PostalCode, @Country, @AddressType); 
          SELECT SCOPE_IDENTITY();"); 

,並使用此調用:

int newCustId = (int)db.ExecuteScalar(sql); 

,所以你現在就從INSERT電話拿回NewCustID - 現在使用在第二該值插入您需要將數據插入到CustomerAddress

+0

謝謝它非常完美。 –

相關問題