我有来自 SOURCE1 表的记录,我需要将这些记录移动到两个名为 DESTINATION1 和 DESTINATION2
的表中我知道如何使用INSERT INTO SELECT语句将记录从 SOURCE1 表复制到 DESTINATION1 表中,但我遇到了问题。我需要的是从 SOURCE1 复制 REMARKS 数据时,我需要将其复制到 DESTINATION2 表中,检索 REFID < / strong>并将 REFID 复制到 FK_DESTINATION2_REFID 列 DESTINATION1 表格中的相应记录中。
标准是仅复制 SOURCE1 表中状态为1的记录,并仅将相应的 REMARKS 数据复制到 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个目标表,如完成时所示,因此本质上它们最初看起来像#strong> SOURCE1 表。
答案 0 :(得分:0)
嗯,您在#Destination表上使用IDENTITY
属性。这意味着您正在尝试为它们分配新的PK,因此它将删除唯一性/ PK - &gt; 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