填充记录从1个表分成2个表和retreiving ID从SOURCE1表中使用
我有记录和我需要这些记录移动到2个称为DESTINATION1和DESTINATION2填充记录从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
TY。澄清:我的#Source1表将只是一个临时表。我使用它作为记录的临时位置,直到我知道所有记录都很好。一旦良好,在这种情况下,有5条记录使用REFID 1-5。但在我的下一批记录中,我将删除这些记录并用新记录重新填充。也许下次可能是使用REFID 1-50的50条记录。当我知道批次是好的时候,我想将它们分成两个独立的表格。但是我需要记录在我创建的两个目标表中是关系型的,看起来像原始源表。 –
查尔斯我的回答完全足够原始帖子,但随着你的评论,你必须从表中填充#Source表中的另一个PK。否则,你将如何保持关系的完整性?目前唯一加入的其他专栏是评论,我认为这些评论不会独一无二。这听起来像你正处于XY问题的中间,我们需要更多的细节。 http://xyproblem.info/和元... https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – scsimon