如何在相同表中的每个SELECT查询结果中插入三行新记录。

25 浏览
0 Comments

如何在相同表中的每个SELECT查询结果中插入三行新记录。

我正在使用SQL Server。\n对于每一个:\n

select * from ServiceItems where Itemtypeid=7004 (query1)

\n我想要在同一个表中插入三行新的数据,如下所示:\n

(ItemID, PackageID, ItemTypeID, ServiceID, ItemName, CreatedDate) VALUES
(19377, 5352, 7007, 2011, N'L1', '11/11/2015 6:50:51 PM'), 
(19378, 5352, 7008, 2011, N'M1', '11/11/2015 6:50:51 PM'), 
(19376, 5352, 7006, 2011, N'W1', '11/11/2015 6:50:51 PM') 
ItemID = 是主键
PackageID = 来自query1
ItemTypeID = 7006,7007,7008
ServiceID = 来自query1
ItemName = L1,M1,W1
CreatedDate = 当前时间

\n我尝试了INSERT INTO SELECT...\n

INSERT INTO ServiceItems (PackageID, ItemTypeID, ServiceID, ItemName, CreatedDate)
SELECT PackageID, '7006', ServiceID, 'W1','' FROM ServiceItems WHERE ItemID = '7004'

\n但这个只会添加一行。我需要创建三个单独的查询吗?使用游标怎么样?

0
0 Comments

问题的出现原因是需要在同一个表中的每个SELECT查询结果中插入三个新行。解决方法是使用UNION ALL或CROSS JOIN。

UNION ALL允许将多个SELECT语句的结果合并成一个结果集。在这种情况下,可以通过使用UNION ALL来实现将三个新行插入到同一个表中。首先,通过从ServiceItems表中选择PackageID、ServiceID和ItemID为'7004'的行来创建第一个SELECT语句的结果。然后,使用UNION ALL将其与两个其他SELECT语句的结果合并。每个SELECT语句都选择PackageID和ServiceID,并为ItemName和CreatedDate分配不同的值。

另一种解决方法是使用CROSS JOIN。CROSS JOIN允许将两个表的每一行组合在一起,生成一个新的表。在这种情况下,可以使用CROSS JOIN将三个新行插入到同一个表中。首先定义一个包含三个新行的表,每个新行包含不同的ItemTypeId和ItemName值。然后,将ServiceItems表与定义的表进行CROSS JOIN操作,并选择PackageID、ServiceID和ItemName等列,为ItemTypeId、ItemName和CreatedDate分配不同的值。

在实际应用中,使用CROSS JOIN可能会比使用UNION ALL更快,因为CROSS JOIN不需要将多个结果集合并。然而,性能可能因实际数据集的大小和内存限制而有所不同。因此,建议根据实际情况对两种方法进行性能测试,以确定最佳解决方案。

可以使用UNION ALL或CROSS JOIN将三个新行插入到同一个表中的SELECT查询结果中。选择哪种方法应根据实际情况进行评估和测试。

0