【发布时间】:2014-05-30 12:45:03
【问题描述】:
我有一个在下面工作的存储过程:
--Stored procedure to update data in Data_Archive.dbo.company
CREATE PROC dbo.TransferCompanyInfo
as
BEGIN TRAN
INSERT INTO Data_Archive.dbo.Company
Select
CompanyID,
CompanyName,
Address1,
Address2,
Address3,
Address4,
ZipCode,
FROM OLD.dbo.company
where not exists (select Data_Archive.dbo.Company.CompanyID from Data_Archive.dbo.Company
WHERE CompanyID = OLD.dbo.Company.CompanyID)
Update Data_Archive.dbo.Company
Set
Data_Archive.dbo.Company.CompanyID = b.CompanyID,
Data_Archive.dbo.Company.CompanyName = b.CompanyName,
Data_Archive.dbo.Company.Address1 = b.Address1,
Data_Archive.dbo.Company.Address2 = b.Address2,
Data_Archive.dbo.Company.Address3 = b.Address3,
Data_Archive.dbo.Company.Address4 = b.Address4,
Data_Archive.dbo.Company.ZipCode = b.ZipCode,
From Data_Archive.dbo.Company a, OLD.dbo.Company b
Where a.CompanyID = b.CompanyID
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occured while copying data to TachographData_Archive.dbo.company', 16, 1)
RETURN -1
END
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRAN
RETURN 0
END
但是我想知道如何使它更快,因为目前它必须扫描表以查看是否不存在,然后插入,然后再次扫描并更新。我在想如果我这样做 if exists update else insert 它会使它更快,但我不知道如何重新格式化它。目前我尝试了下面的代码但不起作用:
--更新Data_Archive.dbo.company中数据的存储过程
CREATE PROC dbo.TransferCompanyInfo
as
BEGIN TRAN
Update Data_Archive.dbo.Company
Set
Data_Archive.dbo.Company.CompanyID = b.CompanyID,
Data_Archive.dbo.Company.CompanyName = b.CompanyName,
Data_Archive.dbo.Company.Address1 = b.Address1,
Data_Archive.dbo.Company.Address2 = b.Address2,
Data_Archive.dbo.Company.Address3 = b.Address3,
Data_Archive.dbo.Company.Address4 = b.Address4,
Data_Archive.dbo.Company.ZipCode = b.ZipCode,
From Data_Archive.dbo.Company a, OLD.dbo.Company b
Where a.CompanyID = b.CompanyID
ELSE
INSERT INTO Data_Archive.dbo.Company
Select
CompanyID,
CompanyName,
Address1,
Address2,
Address3,
Address4,
ZipCode,
FROM OLD.dbo.company
where not exists (select Data_Archive.dbo.Company.CompanyID from Data_Archive.dbo.Company
WHERE CompanyID = OLD.dbo.Company.CompanyID)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occured while copying data to TachographData_Archive.dbo.company', 16, 1)
RETURN -1
END
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRAN
RETURN 0
END
【问题讨论】:
-
你应该看看
Merge。 -
你的桌子上有什么索引?
-
没有索引 atm,我只想让它先发送数据
-
您使用的是什么版本的 SQL Server?
标签: sql sql-server sql-server-2008