Si vous vous demandez comment faire l'importation automatique (package SSIS) des fichiers Excel au serveur SQL, voici une bonne étape par étape avec des captures d'écran: https://www.simple-talk.com/sql/ssis/moving-data-from-excel-to-sql-server---10-steps-to-follow/
Vous devez le faire trois fois . Copier-coller est votre meilleur ami :)
En ce qui concerne la logique qui tient compte de la date et de la structure des dossiers, je suggère d'écrire une tâche de script C#. Voici un exemple mal commenté (désolé, commets où en norvégien et je ne tenais pas à traduire ainsi je les ai enlevés) d'un script qui trouve le nom du nouveau fichier xml qui utilise une convention de nommage très spécifique incluant datatime, beaucoup comme le vôtre sur un ftpserver, puis l'écrit dans une variable SSIS nommée User: newFile. Les fichiers xml ont des noms: Something_YYYYMMDD.xml, d'où la logique dans la fonction fileIsNew.
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text;
using System.Globalization;
namespace ST_59d80f6857bc4a6197af798be478f308.csproj
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public string[] GetDirectory()
{
StringBuilder result = new StringBuilder();
System.Net.FtpWebRequest requestDir = (FtpWebRequest)WebRequest.Create("ftp://someftpserver.com");
requestDir.Method = WebRequestMethods.Ftp.ListDirectory;
requestDir.Credentials = new System.Net.NetworkCredential("User", "password");
FtpWebResponse responseDir = (FtpWebResponse)requestDir.GetResponse();
StreamReader readerDir = new StreamReader(responseDir.GetResponseStream());
string line = readerDir.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = readerDir.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
responseDir.Close();
return result.ToString().Split('\n');
}
public bool fileIsNew(string file, string newestFile)
{
if (file.EndsWith(".xml", System.StringComparison.CurrentCultureIgnoreCase) && file.Length >= 11)
{
decimal test;
if(decimal.TryParse(file.Substring(file.Length - 12, 8), out test))
{
if (Convert.ToInt32(file.Substring(file.Length - 12, 8)) > Convert.ToInt32(newestFile.Substring(newestFile.Length - 12, 8)))
{
return true;
}
return false;
}
return false;
}
return false;
}
public void Main()
{
string newestFile = "19900101.xml";
foreach (string file in GetDirectory())
{
if (fileIsNew(file, newestFile))
{
newestFile = file;
// TEST!!!!
// MessageBox.Show(newestFile);
}
}
Dts.Variables["User::newFile"].Value = newestFile;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
J'imagine que vous pourriez avoir à faire quelque chose de similaire :)