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

时间:2021-08-14 15:07:19

需求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循环嵌套插入目的表中就可以了。