如何將數據插入到3個相關的表(SQL Server)的將數據插入3個相關的表
例如,我有表客戶< - Customer_Address - >地址 我插入到客戶和地址數據後,我如何將Customer和Address中的ID插入到Customer_Address中? (連接表)
謝謝!
如何將數據插入到3個相關的表(SQL Server)的將數據插入3個相關的表
例如,我有表客戶< - Customer_Address - >地址 我插入到客戶和地址數據後,我如何將Customer和Address中的ID插入到Customer_Address中? (連接表)
謝謝!
如果Customer和Address表中的ID是Identity列,則可以將新ID存儲到變量中。
DECLARE @CustomerID int
SELECT @CustomerID = @@IDENTITY FROM TABLE CUSTOMER
類似的語法可以用於地址表。然後在你的INSERT
聲明,你可以這樣做:
INSERT INTO Customer_Address (CustomerID, AddressID)
VALUES (@CustomerID, @AddressID)
使用事務,並記住身份。在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
使用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
這是一種方式。
Declare CustomerID int, AddressID intinsert 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)
如果它是一個應用程序,爲什麼不只是使用Linq,你可以做到這樣的事情在短短几分鐘內,在一個更高的壓縮方式和更多的大腿業務邏輯模型。
如果不是,我強烈建議事務和SCOPE_IDENTITY版本,因爲如果您處於負載較重的系統中,則其他操作可以執行插入並更改標識值,以便以不一致的數據結束。
如果要插入多行,你可以使用輸出子句:
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;