插入一个表时,插入具有相同值的其他表

时间:2017-05-11 15:21:56

标签: sql sql-server sql-insert

我有3张桌子:

用户,联系人和pay_roll。

所有表共享列user_id,这是主键,并且在所有这些表上自动递增,当我将新用户插入表“users”时,是否有办法向两个联系人添加空行和pay_roll然后稍后更新?

到目前为止我的SQL查询:

INSERT INTO dbo.users (fName, lName) VALUES ('Kieron', 'Oates')

2 个答案:

答案 0 :(得分:2)

您可以使用insert的output子句并插入另一个表中,如下所示:

declare @otheruser table (fname varchar(10), lname varchar(10))
declare @user table (fname varchar(10), lname varchar(10))

insert into @user(fname, lname)
output inserted.fname, inserted.lname into @otheruser
values ('Kieron', 'Oates')

select * from @otheruser
select * from @user

对于空行,您可以使用如下:

create table #contact  (userid int, fname varchar(10), addr varchar(10))
create table #user (userid int identity(1,1), fname varchar(10), lname varchar(10))
create table #pay_roll (userid int, pay money)

insert into #user(fname, lname)
output inserted.userid, null as fname, null as addr into #contact
values ('Kieron', 'Oates')

答案 1 :(得分:0)

你做错了;您的架构存在根本缺陷。 "孩子"表联系人和工资单依赖于用户表,并且不应将标识列用作用户的外键。从这些列中删除标识属性。由于很明显您要在用户和每个子表之间创建1:1关系,因此联系人和工资核算中的用户列应该是主键和外键。

不 - 你不添加"空白"要在以后填写的行。为什么?首先,你无法真正区分"空白"行和非空行而不对列的内容进行假设。这种方法只会导致眼泪和许多长时间的工作。