如何插入select的结果

时间:2017-01-20 15:01:27

标签: sql sql-server sql-server-2012

我是一名C#dev学习SQL。

我需要将数据从一个数据库发布到另一个已经具有相同结构且位于同一个Sql Server实例上的数据库。通过发布,我的意思是我希望所有的id和数据完全相同。

第二个数据库是第一个数据库的精确副本。

这是查询:

Select vev.* from [dbo].[metadata_document_set] mds

inner join
[dbo].[document_metadata] dm
on mds.metadata_document_set_id = dm.metadata_document_set_id

inner join [dbo].[segment_metadata] sm
on dm.document_metadata_id = sm.document_metadata_id

inner join [dbo].[element_metadata] em
on sm.segment_metadata_id = em.segment_metadata_id

inner join [dbo].[valid_element_value] vev
on em.element_metadata_id = vev.element_metadata_id

where mds.code = 'PA'

我需要插入valid_element_values的所有行,以及element_metadata,segment_metadata和document_metadata。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果要插入单独的表,则必须一次插入一个表。

insert [new_database_name].[dbo].[metadata_document_set]
Select * from [old_database_name].[dbo].[metadata_document_set] 
where code = 'PA'

insert [new_database_name].[dbo].[document_metadata]
Select * from [old_database_name].[dbo].[document_metadata] 
<filter as required>

等等。

这假设您的表格完全相同。

NB 如果您有INDENTITY列,则无效。

答案 1 :(得分:1)

Select vev.*只会从valid_element_value表中选择列,因此请从vev.*中移除select,然后按照与您的{相同的顺序从所有四个表中提及columns {1}}列列表

考虑使用目标数据库中的所有必需列创建目标表

更新:您希望插入四个不同的表格。然后,您需要四个不同的Insert语句

Insert

关于身份,如果目标表中有INSERT INTO target_database.SCHEMA.target_valid_element_value (vev_col1, vev_col2, ..) SELECT vev.col1, vev.col2, .. FROM [dbo].[metadata_document_set] mds INNER JOIN [dbo].[document_metadata] dm ON mds.metadata_document_set_id = dm.metadata_document_set_id INNER JOIN [dbo].[segment_metadata] sm ON dm.document_metadata_id = sm.document_metadata_id INNER JOIN [dbo].[element_metadata] em ON sm.segment_metadata_id = em.segment_metadata_id INNER JOIN [dbo].[valid_element_value] vev ON em.element_metadata_id = vev.element_metadata_id WHERE mds.code = 'PA' INSERT INTO target_database.SCHEMA.target_element_metadata (em_col1, em_col2, ..) SELECT em.col1, em.col2, .. FROM [dbo].[metadata_document_set] mds INNER JOIN [dbo].[document_metadata] dm ON mds.metadata_document_set_id = dm.metadata_document_set_id INNER JOIN [dbo].[segment_metadata] sm ON dm.document_metadata_id = sm.document_metadata_id INNER JOIN [dbo].[element_metadata] em ON sm.segment_metadata_id = em.segment_metadata_id INNER JOIN [dbo].[valid_element_value] vev ON em.element_metadata_id = vev.element_metadata_id WHERE mds.code = 'PA' 列,并且您希望从这些列的源插入值,那么

identity

如果您不想将值显式插入标识列,则不要在set Identity_insert target_table ON <<Insert statement>> set Identity_insert target_table OFF &amp;中添加标识列。 Insert列列表

答案 2 :(得分:0)

假设您有[dbo1]。[metadata_document_set1]表(并且它包含select查询中的所有列),那么

INSERT INTO [dbo1].[metadata_document_set1]
Select vev.*,em.*,sm.*,dm.*,mds.* from [dbo].[metadata_document_set] mds        
inner join [dbo].[document_metadata] dm

on mds.metadata_document_set_id = dm.metadata_document_set_id

inner join [dbo].[segment_metadata] sm
on dm.document_metadata_id = sm.document_metadata_id

inner join [dbo].[element_metadata] em
on sm.segment_metadata_id = em.segment_metadata_id

inner join [dbo].[valid_element_value] vev
on em.element_metadata_id = vev.element_metadata_id

where mds.code = 'PA'