对select中的每一行执行insert操作?

我有一些我需要插入到多个表中的logging。 每隔一列将是一个常数。

可怜的伪代码下面 – 这是我想要做的:

create table #temp_buildings ( building_id varchar(20) ) insert into #temp_buildings (building_id) VALUES ('11070') insert into #temp_buildings (building_id) VALUES ('11071') insert into #temp_buildings (building_id) VALUES ('20570') insert into #temp_buildings (building_id) VALUES ('21570') insert into #temp_buildings (building_id) VALUES ('22570') insert into property.portfolio_property_xref ( portfolio_id , building_id , created_date , last_modified_date ) values ( 34 , ( select building_id from #temp_buildings ) , getdate() , null ) 

意图:对#temp_buildings上的每条logging执行property.portfolio_property_xref插入操作

我想我可以用光标做到这一点 – 但相信这将是非常缓慢的。 由于这个练习将来会重复,我宁愿用更快的方法解决这个问题,但是我不确定。 对于任何反馈,我们都表示感谢!

 INSERT INTO table1 ( column1 ) SELECT col1 FROM table2 

喜欢:

 insert into property.portfolio_property_xref ( portfolio_id , building_id , created_date , last_modified_date ) select 34, building_id, getdate(), null from #temp_buildings 

您将要使用INSERT INTO SELECT FROM (请参阅SQL小提琴演示 )

 insert into property.portfolio_property_xref ( portfolio_id , building_id , created_date , last_modified_date ) SELECT 34 , building_id, getdate(), null from #temp_buildings 

这种随机的,但我觉得这可能是有用的,谁来这里的这个问题。 有时,我使用Microsoft Excel VBA生成上面列出的部分SQL语句。 当我在进行表格构build和数据转换以创build新的工作时,我发现这非常有用。 这是一个非常简单的例子。 它在两个不相关的系统之间build立了联系。 然后,链接允许我在仓库环境中build立一个新的表,将3个不相关的系统捆绑在一起。 无论如何,它允许我在几秒钟内创build大于5000行的SQL(一次性使用 – 仅仅是一个更大的ETL任务的一小部分)。

 Option Explicit Dim arow As Integer Dim acol As Integer Dim lrow As Integer Dim IsCellEmpty As String Dim CustNo As Integer Dim SkuLevel As Integer Sub SkuLevelUpdate() 'find end ouf input file arow = 1 acol = 1 Do IsCellEmpty = Cells(arow, acol).Value arow = arow + 1 Loop Until IsCellEmpty = "" lrow = arow - 1 'Write SQL arow = 2 acol = 5 Do CustNo = Cells(arow, 1) SkuLevel = Cells(arow, 4) Cells(arow, acol) = "INSERT INTO dbo.#TempSkuLevelRelationships (CustNo, SkuLevel) VALUES (" & CustNo & ", " & SkuLevel & ");" arow = arow + 1 Loop Until arow = lrow End Sub 

是的,我知道所有关于SQL注入等我创build电子表格,我复制/粘贴数据到更大的SQL代码为新的构build,表修改,等等当数据当前不驻留在SQL表

尝试这个

  insert into property.portfolio_property_xref ( portfolio_id , building_id , created_date , last_modified_date ) Select 34, building_id, GETDATE(), NULL From #temp_buildings 

你说你可以用光标做。 正如其他答案显示你,你不必这样做。 SQL Server是一个基于集合的RDMS,它更能够处理一组数据,然后处理单行。