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