【发布时间】:2018-06-26 02:41:02
【问题描述】:
我需要 创建将
- 将源表中的数据插入或更新到 target1 表中
- 向 target2 表中插入数据并获得插入的 ID 来自 target1、target2 表
- 将它们插入目标表3
- 将 target1.ID 插入到 target4 表中
源表是临时表,我使用批量复制将大数据插入到该表中,然后将数据移动到目标表以提高性能。
MSPCompanies - insert or update по признаку INN
MSPDownloads insert
MSPAccepted insert MSPCompanies.ID и MSPDownloads.ID
MSPAcceptedNow insert MSPCompanies.ID
在我使用 MERGE 完成的 MSPCompanies 中插入或更新
BEGIN
BEGIN TRY
BEGIN TRANSACTION
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
MERGE INTO [MSPCompanies] AS [Target]
USING [MSPTempTable] AS [Source]
ON Target.INN = Source.INN
WHEN MATCHED THEN
UPDATE SET
Target.Name = Source.Name,
Target.ShortName = Source.ShortName,
Target.FIO = Source.FIO,
Target.SubjectType = Source.SubjectType,
Target.SubjectCategory = Source.SubjectCategory,
@MSPCompaniesId = Target.MSP_Companies_ID
WHEN NOT MATCHED THEN
INSERT
(INN, Name, ShortName, FIO, SubjectType, SubjectCategory)
VALUES
(Source.INN, Source.Name, Source.ShortName, Source.FIO, Source.SubjectType, Source.SubjectCategory);
IF @MSPCompaniesId IS NULL
BEGIN
SET @MSPCompaniesId = CAST(SCOPE_IDENTITY() as [int]);
END
SELECT @MSPCompaniesId
--BEGIN
INSERT INTO dbo.MSPAcceptedNow
(MSP_Company_ID)
VALUES(@MSPCompaniesId)
但是之后似乎无法对其他三个表进行其他操作,并尝试使用插入-更新进行操作,但无论如何都无法做到。
BEGIN TRANSACTION MoveDataFromMSPTempTableT;
UPDATE t
SET
Name = s.Name,
ShortName = s.ShortName,
FIO = s.FIO,
SubjectType = s.SubjectType,
SubjectCategory = s.SubjectCategory
FROM MSPCompanies t
JOIN MSPTempTable s
ON s.INN = t.INN;
INSERT INTO MSPCompanies
SELECT s.INN,
s.Name,
s.ShortName,
s.FIO,
s.SubjectType,
s.SubjectCategory
FROM MSPTempTable s
LEFT JOIN MSPCompanies t
ON s.INN = t.INN
WHERE t.INN IS NULL;
COMMIT TRANSACTION MoveDataFromMSPTempTableT;
谢谢。
【问题讨论】:
标签: sql-server database stored-procedures sqlbulkcopy