我需要在多个表中插入一些记录。每隔一列都是常数。
下面的伪代码不好 - 这就是我想要做的事情:
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上的每条记录执行insert.portfolio_property_xref的插入
我想我可以用光标做到这一点 - 但相信这会非常慢。由于这个练习将来可以重复,我宁愿用更快的方法解决这个问题,但我不确定如何。任何反馈都将不胜感激!
答案 0 :(得分:117)
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
答案 1 :(得分:5)
您需要使用INSERT INTO SELECT FROM
(请参阅SQL Fiddle with Demo)
insert into property.portfolio_property_xref
(
portfolio_id ,
building_id ,
created_date ,
last_modified_date
)
SELECT 34 ,
building_id,
getdate(),
null
from #temp_buildings
答案 2 :(得分:2)
有点随机,但我觉得这可能对来到这个问题的任何人都有用。有时,我使用Microsoft Excel VBA生成上面列出的部分SQL语句。当我处理表格构建和数据转换以建立新工作的情况时,我发现这非常有用。这是一个非常简单的例子。它在两个独立的不相关系统之间建立了联系。然后链接允许我在仓库环境中构建一个新表,将3个不相关的系统绑定在一起。无论如何,它允许我创建> 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注入等等。我创建了电子表格,当数据当前不存在时,我将数据复制/粘贴到更大的SQL代码中以进行新构造,表格修改等一个SQL表
答案 3 :(得分:0)
试试这个
insert into property.portfolio_property_xref
(
portfolio_id ,
building_id ,
created_date ,
last_modified_date
)
Select
34,
building_id,
GETDATE(),
NULL
From #temp_buildings
答案 4 :(得分:0)
你说你可以用光标做到这一点。正如其他答案所示,你不必这样做。 SQL Server是一个基于集合的RDMS,它更能处理一组数据,然后处理单行。