所以我在sql server表中有一个目录,我需要每隔12小时刷新一次这个目录,这样做的正确方法是什么?
我一直在做一个简单的删除,然后是更新数据的批量复制,但我担心另一个进程正在使用这个表,可能会破坏一些东西。
干杯,
答案 0 :(得分:0)
您可以使用MERGE功能。它在MS SQL Server 2008+中可用,并且还添加了try / catch - 事务处理。请尝试以下示例:
CREATE TABLE #Temp1
(
Id INT IDENTITY PRIMARY KEY
,Description NVARCHAR(20)
)
CREATE TABLE #Temp2
(
Id INT IDENTITY PRIMARY KEY
,Description NVARCHAR(20)
)
INSERT INTO #Temp1 VALUES ('Example1'), ('Example2'), ('');
INSERT INTO #Temp2 VALUES ('Example1'), ('Example4'), ('Example5');
--First values:
SELECT Id, Description FROM dbo.#Temp1;
SELECT Id, Description FROM dbo.#Temp2;
BEGIN TRY
BEGIN TRANSACTION;
--MERGE statement:
--#Temp1 will be our Target and #Temp2 our Source
MERGE dbo.#Temp1 AS target
USING (SELECT Id, Description FROM #Temp2) AS source
ON (target.Id = source.Id)
--When rows matched and description from Target will be '', then the delete will happen
WHEN MATCHED AND target.Description = ''
THEN DELETE
--When rows matched (by their Id, seen previously), then the update will happen:
WHEN MATCHED
THEN UPDATE SET target.Description = source.Description
OUTPUT $action;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
RAISERROR('<<Transaction uncommited. Rolling back transaction',10,1);
ROLLBACK TRANSACTION;
END CATCH
--Final values:
SELECT Id, Description FROM dbo.#Temp1;
SELECT Id, Description FROM dbo.#Temp2;
DROP TABLE #Temp1;
DROP TABLE #Temp2;