如果数据存在,则删除并插入数据数据,如果日期不存在则插入数据

时间:2017-08-04 14:24:12

标签: sql-server-2014

我有下面的脚本可行但是我需要一些帮助来修改它。

我现在需要做的是以下内容 1.如果当天已存在,我需要删除当天的所有数据并插入当天的新数据。 2.如果当天不存在,我需要插入当天的数据。

我的日期格式写为yyyy-mm-dd hh:mm:ss 在当前形式中,只有当前日期大于前一天才会插入数据。

Declare @Date As Date
SET @Date = (SELECT Max(CONVERT(char(10),[Date],102)) FROM [dbo].[ESOEmail_Monthly$])
INSERT INTO [dbo].[ESOEmail_Monthly$]
SELECT      [EMP_ID]
       ,[NAME]
       ,[DEPT]
       ,[DATE]
       ,[End Time]
       ,[LOGOUT]
       ,[ESO]
       ,[Team Manager]
       ,[Senior Manager]
       ,[SITE]
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                     'Excel 12.0;Database=\\VF_RSOSDCNASUDA\fidopost\National_Command\National Command Centre\SQL\ESO\ESO.xlsm;HDR=YES',
                     'SELECT * FROM [ESOEmail$]')
WHERE (CONVERT(char(10),[Date],102) > CONVERT(DATETIME, @Date, 102))

1 个答案:

答案 0 :(得分:0)

在挖掘并找到一些帮助后,我找到了一个对我有用的解决方案。我发布了解决方案。

Declare @Date As DATE

IF OBJECT_ID('Tempdb..#1','U') IS NOT NULL
DROP TABLE #1

SELECT      [EMP_ID]
   ,[NAME]
   ,[DEPT]
   ,[DATE]
   ,[End Time]
   ,[LOGOUT]
   ,[ESO]
   ,[Team Manager]
   ,[Senior Manager]
   ,[SITE]
INTO #1
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                 'Excel 12.0;Database=\\VF_RSOSDCNASUDA\fidopost\National_Command\National Command Centre\SQL\ESO\ESO.xlsm;HDR=YES',
                 'SELECT * FROM [ESOEmail$]');

SELECT TOP 1 @Date=[DATE] FROM #1

--DELETE
DELETE [dbo].[ESOEmail_Monthly$] WHERE CONVERT(char(10),[Date],102)=@Date;

--INSERT
INSERT INTO [dbo].[ESOEmail_Monthly$]
SELECT      [EMP_ID]
   ,[NAME]
   ,[DEPT]
   ,[DATE]
   ,[End Time]
   ,[LOGOUT]
   ,[ESO]
   ,[Team Manager]
   ,[Senior Manager]
   ,[SITE]
FROM #1
DROP TABLE #1