0

我对 SQL 查询有疑问

我有一个有两列的表,employee_name, phone_number。该表有 100 行。

我想存储employee_name在一个表和phone_number另一个表中并建立关系。我将解释架构

员工表

emp_id (identity)
emp_name (text)
ph_id (FK from the phone table)

电话

ph_id (identity)
phone_number 

所以我尝试了

insert into emp_table (emp_name, ph_id)
select employee_name, (insert into phone_table output inserted.ph_id values (whole.phone)) as phone_id

这个查询是错误的。但这就是我想要做的。

我想将电话号码插入电话号码表中,并在同一选择语句中具有标识并插入到员工表中。

你的意见?

决赛桌应该是

整张桌子(这是我现在拥有的)

emp_name   phone_number
----------------------
name1      123
name2      456
name4      789

并在执行查询后

员工表

name    ph_id
-------------
name1   1
name2   2
name3   3

电话表

phone_id   phone_number
-------------------------
1          123
2          456
3          789
4

3 回答 3

1

不确定您是否拥有应有的目标表结构,但这将解决问题中的问题。

首先为每个不同的电话号码插入一行phone_table,然后插入其中并在和employee_table之间进行连接whole_tablephone_tablephone_number

insert into phone_table(phone_number)  
select distinct phone_number
from whole_table

insert into employee_table(name, ph_id)
select w.emp_name, p.phone_id 
from whole_table as w
  inner join phone_table as p
    on w.phone_number = p.phone_number

SQL小提琴

更新:

您可以merge ... output按照此处所述使用来处理电话号码和姓名的重复项。

在表变量中使用生成的 id 捕获源数据,并在插入语句中使用表变量。

declare @T table
(
  phone_id int,
  emp_name varchar(10),
  phone_number varchar(10)
);

merge phone_table as p
using whole_table as w 
on 0 = 1
when not matched then
insert (phone_number) values (w.phone_number)
output inserted.phone_id,
       w.emp_name,
       w.phone_number
into @T(phone_id, emp_name, phone_number);

insert into employee_table(name, ph_id)
select t.emp_name, t.phone_id 
from @T as t;

SQL小提琴

于 2013-03-06T07:01:21.357 回答
0

使用@@Identity。像这样:

insert into phoneTable(phone_number) values('999888777');

declare @phoneid int

set @phoneid = @@IDENTITY

insert into EmployeeTable(emp_name, ph_id) values('John Supakin', @phoneid)

或者,简单地说。但在长查询中要小心。

insert into phoneTable(phone_number) values('999888777');

insert into EmployeeTable(emp_name, ph_id) values('John Supakin', @@IDENTITY)
于 2013-03-06T06:26:02.583 回答
0

您将不得不分成 2 个不同的 SQL。一个插入到 EmployeeTable 中,另一个插入到 phonetable 中。

于 2013-03-06T06:30:33.843 回答