2017-08-04 18 views
0

以下のスクリプトを使用していますが、変更が必要です。日はすでに私はその日からすべてのデータを削除して、その日のために新しいデータを挿入する必要がある場合は、私が今行う必要がある何データが存在する場合はデータを削除して挿入し、1日が存在しない場合はデータを挿入してください

は、次の 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)) 
+0

は 'MERGE'(https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql)情報アレックスのため – Alex

+0

感謝を見てください。私はすばやく見て、私は挿入しようとしているファイルからこれを実装する方法を確認していない。新しいデータを最初にテンポラリテーブルにダンプしてからアップデートを行う必要がありますか、それとも私がアップデートしようとしているExcelファイルからこれを直接行うことができるのでしょうか? –

+0

あなたの前のコメントであなたが何を言おうとしているのか十分に理解していません。あなたの質問を読んでいるところは、データベーステーブルにインポートする必要があるExcelファイルがあることです。あなたは既にそれを行い、それを変更/強化したい既存のメソッドをいくつか持っています。私は 'MERGE'を使うことができると提案しました。これは、あなたがあなたのロジックを1つのステートメントで実装できるようにするためです。 – Alex

答えて

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)[email protected]; 

--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 
関連する問題