sqlserver中如何将只有一个字段的表一对多或者多对多的插入到另外一个表中

需求1
一对多的插入另外一个表,例如表A有一个日期字段,表B有一个UserID字段和Date字段。现在要把一个新的UserID和所有的表A中Date字段插入到表B中,即同一个UserID对于多个Date,存储过程如下(复制请慎重!)

IF NOT EXISTS ( SELECT date FROM B WHERE DATEDIFF(d, Date, GETDATE()) = 0 AND UserID = @UserID)
BEGIN
DECLARE @i INT
SET @i = 1
DECLARE @id INT
SET @id = 1
DECLARE @totalcount INT
DECLARE @AC TABLE ( id INT IDENTITY(1,1), date DATE )
SELECT @totalcount = COUNT(*) FROM A WHERE Date >= GETDATE() WHILE @id <= @totalcount
BEGIN
INSERT INTO @AC SELECT * FROM A WHERE Date >= GETDATE()
SET @id = @id + 1
END
WHILE @i <= @totalcount
BEGIN
INSERT INTO B ( UserID, Date) VALUES ( @UserID,( SELECT  date FROM @AC WHERE id = @i))
SET @i = @i + 1
END
END

存储过程的关键是临时表@AC,有一个自增列id,其实这个表可以在设计表A的时候就加这么一个字段,只是由于之前没有这个字段,所以只好用了临时表这个方法。
如果是多个UserID插入多个Date,就把UserID和Date放在两个临时表里,都给一个自增的字段比如id,然后UserID和Date循环嵌套插入目的表中就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值