填充记录从1个表分成2个表和retreiving ID从SOURCE1表中使用

问题描述:

我有记录和我需要这些记录移动到2个称为DESTINATION1DESTINATION2填充记录从1个表分成2个表和retreiving ID从<strong>SOURCE1</strong>表中使用

予不同的表知道如何从SOURCE1表使用INSERT INTO SELECT语句复制记录到DESTINATION1表,但我遇到一个问题。复制备注从SOURCE1数据时,我需要的是,我需要复制到DESTINATION2表,检索REFID和复制REFID到我DESTINATION1表中相应的记录列FK_DESTINATION2_REFID

的标准是只记录在SOURCE1表与STATUS 1复制并仅数据复制各自备注到DESTINATION2表如果不为空。另外,是否有可能在没有存储过程的情况下执行此操作,如果不是,则不是什么大问题。

CREATE TABLE #Source1 (
RefID int IDENTITY(1,1) NOT NULL, 
Status bit NULL, 
ProviderID int NULL, 
Remarks varchar(max) NULL 
) 

Create Table #Destination1 (
RefID int IDENTITY(1,1) NOT NULL, 
Status bit NULL, 
ProviderID int NULL, 
FK_Destination2_RefID int 
) 

Create Table #Destination2 (
RefID int IDENTITY(1,1) NOT NULL, 
Remarks varchar(max) NULL 
) 

-- Insert Records into #Source1 
Insert Into #Source1 values (1,100,'Test 555') 
Insert Into #Source1 values (0,400,'Test 123') 
Insert Into #Source1 values (1,300,NULL) 
Insert Into #Source1 values (1,500,'Test 999') 
Insert Into #Source1 values (1,200,NULL) 

--Drop table #Source1 
--Drop table #Destination1 
--Drop table #Destination2 

结果是这样的:

Source1 Table 
RefID  Status ProviderID Remarks 
----------- ------ ----------- ----------- 
1   1  100   Test 555 
2   0  400   Test 123 
3   1  300   NULL 
4   1  500   Test 999 
5   1  200   NULL 

Destination1 Table 
RefID  Status ProviderID FK_Destination2_RefID 
----------- ------ ----------- --------------------- 
1   1  100   1 
2   1  300   NULL 
3   1  500   2 
4   1  200   NULL 

Destination2 Table 
RefID  Remarks 
------  --------- 
1   Test 555 
2   Test 999 

编辑:我#SOURCE1表将持有的记录一组动态的量。在这种情况下,我有5个记录。但下一次,它可能是50个记录。在使用#SOURCE1表中时,我每次都会截断表和REFID将开始回1。由于这是一批记录的临时存放表,我需要他们永久移动到2目的地表指示在本质上完成,所以当他们可以看起来像#SOURCE1表最初。

好,您正在使用的#Destination表IDENTITY财产。这意味着你正在尝试一种新的PK分配给他们,因此它会删除唯一性/ PK - > FK链接#Source表......这是不必要的,因为你的源表已在处理这一点。因此,只需从#Destination表中删除此属性,然后按照您的怀疑进行插入。如果需要,您仍然可以在目标表上添加UNIQUE CONSTRAINT ...但如果这是所有用途,您应该永远不会遇到非唯一性。你的FK不会是顺序的,但那是因为你限制了要插入的数据。如果您想要另一个PK IDENTITY列,请将其分开。我已经包括,以下作为一个例子

CREATE TABLE #Source1 (
RefID int IDENTITY(1,1) NOT NULL, 
Status bit NULL, 
ProviderID int NULL, 
Remarks varchar(max) NULL 
) 

Create Table #Destination1 (
SomePK int IDENTITY(1,1), 
RefID int , 
Status bit NULL, 
ProviderID int NULL, 
FK_Destination2_RefID int 
) 

Create Table #Destination2 (
SomePK int IDENTITY(1,1), 
RefID int , 
Remarks varchar(max) NULL 
) 

-- Insert Records into #Source1 
Insert Into #Source1 values (1,100,'Test 555') 
Insert Into #Source1 values (0,400,'Test 123') 
Insert Into #Source1 values (1,300,NULL) 
Insert Into #Source1 values (1,500,'Test 999') 
Insert Into #Source1 values (1,200,NULL) 



insert into #Destination2 
select 
    RefID 
    ,Remarks 
from #Source1 
where 
    Remarks is not null and Status = 1 

insert into #Destination1 
select 
    s.RefID 
    ,s.Status 
    ,s.ProviderID 
    ,d.RefID 
from 
#Source1 s 
left join #Destination2 d on d.RefID = s.RefID 
where 
    s.Status = 1 

select * from #Source1 
select * from #Destination1 
select * from #Destination2 

Drop table #Source1 
Drop table #Destination1 
Drop table #Destination2 
+0

TY。澄清:我的#Source1表将只是一个临时表。我使用它作为记录的临时位置,直到我知道所有记录都很好。一旦良好,在这种情况下,有5条记录使用REFID 1-5。但在我的下一批记录中,我将删除这些记录并用新记录重新填充。也许下次可能是使用REFID 1-50的50条记录。当我知道批次是好的时候,我想将它们分成两个独立的表格。但是我需要记录在我创建的两个目标表中是关系型的,看起来像原始源表。 –

+0

查尔斯我的回答完全足够原始帖子,但随着你的评论,你必须从表中填充#Source表中的另一个PK。否则,你将如何保持关系的完整性?目前唯一加入的其他专栏是评论,我认为这些评论不会独一无二。这听起来像你正处于XY问题的中间,我们需要更多的细节。 http://xyproblem.info/和元... https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – scsimon