Dra*_*aco 5 sql database sql-server sql-server-2005 foreign-keys
如果我有2个表,请将它们称为TableA和TableB.TableB包含引用TableA的外键.我现在需要为给定方案向TableA和TableB添加数据.为此,我首先必须在TableA中插入数据,然后查找并检索TableA的最后插入的主键,并将其用作TableB中的外键值.然后我在TableB中插入值.这似乎只是为了插入1组数据而做了大量的工作.我怎么能做到这一点?如果可能,请为我提供SQL Server 2005的SQL语句.
听起来不错。请注意,您可以SCOPE_IDENTITY()在每行的基础上使用,或者如果您使用 INSERT/OUTPUT 语法,则可以执行基于集合的操作,然后连接第一次插入的输出集合 - 例如,这里我们只有 1 INSERT(每个)到“真实”表中:
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |