Подтвердить что ты не робот

Выполнить вставку для каждой строки, взятой из выделения?

У меня есть несколько записей, которые мне нужно вставить в несколько таблиц. Каждый столбец будет константой.

Бедный псевдо-код ниже - это то, что я хочу сделать:

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
        )

Цель: Выполните вставку в property.portfolio_property_xref для каждой записи в #temp_buildings

Думаю, я мог бы сделать это с помощью курсора, но считаю, что это было бы ужасно медленным. Поскольку это упражнение будет повторяемо в будущем, я бы скорее решил это быстрее, но я не уверен, как это сделать. Любая обратная связь будет оценена!

4b9b3361

Ответ 1

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

Ответ 2

Вы хотите использовать 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

Ответ 3

Какой-то случайный, но я считаю, что это может быть полезно любому, кто приходит сюда к этому вопросу. Иногда я использую 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

Ответ 4

Попробуйте это

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

Ответ 5

Вы говорите, что можете сделать это с помощью курсора. Как показывают другие ответы, вы не должны этого делать. SQL Server является основанным на наборе RDMS, он более способен обрабатывать набор данных, а затем обрабатывать отдельные строки.