我是一名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。
我该怎么做?
答案 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'