在Car
中为每位用户插入Users
并将用户CarID
设置为已插入ID
的{{1}}的最简单方法是什么?
Car
很抱歉,如果这可能是一个重复的问题,但我找不到任何简单的解决方案。我发现的一切都是使用复杂的游标,指针等。
这种简单且可重复使用的语法可以在系统升级等过程中迁移数据时节省时间。
答案 0 :(得分:1)
如果您使用的是SQL Server 2008或更高版本,则可以使用合并并输出类似的内容。
样本表和数据:
declare @Users table
(
ID int identity primary key,
Name varchar(10) not null,
CarID int null
);
declare @Cars table
(
ID int identity primary key,
Name varchar(10) not null
);
insert into @Users(Name) values ('User1'),('User2'),('User3');
为每个用户添加一个小心,并将自动生成的CarID移回用户。
declare @ID table(CarID int, UserID int)
merge @Cars as C
using @Users as U
on 0 = 1
when not matched then
insert (Name) values ('CarName')
output inserted.ID, U.ID into @ID;
update U
set CarID = I.CarID
from @Users as U
inner join @ID as I
on U.ID = I.UserID
在SE Data上试用。
可以找到有关合并/输出技巧的更多信息here。
答案 1 :(得分:0)
我假设你正在使用的代码让你调用存储过程?
create procedure dbo.CarUserInsert_sp
(
@p_UserID int,
@p_UserName varchar(100),
@p_CarID int,
@p_CarName varchar(100)
)
as
if not exists ( select 1 from Cars where ID = @p_CarID )
insert Cars values ( @p_CarID, @p_CarName )
if exists (select 1 from Users where ID = @p_UserID )
update Users set Name = @p_UserName, CarID = @p_CarID where ID = @p_UserID
else
insert Users values ( @p_UserID, @p_UserName, @p_CarID )
go
答案 2 :(得分:0)
试试这个:
insert into cars (name)
select distinct(name) from users
update user
set carId = (select ID from cars where cars.name=user.Name)