2010-11-02 35 views
2

如何將數據插入到3個相關的表(SQL Server)的將數據插入3個相關的表

例如,我有表客戶< - Customer_Address - >地址 我插入到客戶和地址數據後,我如何將Customer和Address中的ID插入到Customer_Address中? (連接表)

謝謝!

回答

0

如果Customer和Address表中的ID是Identity列,則可以將新ID存儲到變量中。

DECLARE @CustomerID int 

SELECT @CustomerID = @@IDENTITY FROM TABLE CUSTOMER 

類似的語法可以用於地址表。然後在你的INSERT聲明,你可以這樣做:

INSERT INTO Customer_Address (CustomerID, AddressID) 
VALUES (@CustomerID, @AddressID) 
0

使用事務,並記住身份。在SQL Server -

declare @CustomerId int 
declare @AddressId int 

begin tran 
    insert into Customer (blah, blah) values (blah, blah) 
    set @CustomerId = @@IDENTITY --assuming there are no triggers 
    insert into [Address] (blah, blah) values (blah, blah) 
    set @AddressId = @@IDENTITY  --once again, no triggers to mess up the @@IDENTITY 
    insert into CustomerAddress(CustomerId,AddressId) values (@CustomerId,@AddressId) 
commit 
3

使用SCOPE_IDENTITY,@@ IDENTITY可以從任何範圍返回一個值:

DECLARE @CustomerId INT 
DECLARE @AddressId INT 

BEGIN TRANSACTION 

    INSERT INTO CUSTOMER (blah, blah) values (blah, blah) 
    SET @CustomerId = SCOPE_IDENTITY 

    INSERT INTO ADDRESS (blah, blah) values (blah, blah) 
    SET @AddressId = SCOPE_IDENTITY 

    INSERT INTO CUSTOMERADDRESS (CustomerId,AddressId) values (@CustomerId,@AddressId) 

COMMIT TRANSACTION 
0

這是一種方式。

 
Declare CustomerID int, AddressID int

insert into Customer (list, of, fields) values (list, of, values) select @CustomerID=scope_Identity() insert into Address (list, of, fields) values (list, of, values) select @AddressID =scope_Identity()

insert into Customer_Address (CustomerID, AddressID) values (@CustomerID, @AddressID)

0

如果它是一個應用程序,爲什麼不只是使用Linq,你可以做到這樣的事情在短短几分鐘內,在一個更高的壓縮方式和更多的大腿業務邏輯模型。

如果不是,我強烈建議事務和SCOPE_IDENTITY版本,因爲如果您處於負載較重的系統中,則其他操作可以執行插入並更改標識值,以便以不一致的數據結束。

1

如果要插入多行,你可以使用輸出子句:

declare @insertedAddresses table (OriginalID int, AddressID int); 
declare @insertedCustomers table (OriginalID int, CustomerID int); 

insert into dbo.Addresses (AddressData) 
output source.OriginalID, inserted.AddressID into @insertedAddresses 
select AddressData from source; 

insert into dbo.Customers (CustomerData) 
output source.OriginalID, inserted.CustomerID into @insertedCustomers 
select CustomerData from source; 

insert into dbo.Customer_Address (AddressID, CustomerID) 
select a.AddressID, c.CustomerID 
from @insertedAddresses a inner join @insertedCustomers c on c.OriginalID=a.OriginalID;