我有三个Excel文件,每周更新一次名称,包括更新的Date.xlsx。 我需要使用SSIS包将这三个Excel文件加载到我的三个表中。 我还需要自动化,因为我必须为此安排工作。
如何自动选择特定Excel并加载到特定表。 例如
我需要将此Excel数据加载到三个不同的表中,因为这些Excel更新的新名称为(1.workanalysis_28032015.xlsx),特别是每周的文件夹。我需要选择工作分析并将数据转储到表中,其余两个相同。
答案 0 :(得分:1)
为每个循环使用a。 正在为该实例处理的文件名将/可以存储在变量中,只占用文件名的字符串部分(您可以使用脚本任务)。将验证放在优先约束中(例如@var =" workanalysis")然后将其传递给所需的特定目的地。
答案 1 :(得分:0)
如果您想知道如何自动导入(SSIS包)Excel文件到SQL服务器,这里有一个很好的分步指南: https://www.simple-talk.com/sql/ssis/moving-data-from-excel-to-sql-server---10-steps-to-follow/
你必须做三次。复制粘贴是你的朋友:)
关于考虑日期和文件夹结构的逻辑,我建议编写一个C#脚本任务。这是一个糟糕的评论示例(抱歉,记得在挪威语和我不关心翻译所以我删除它们)的脚本,找到最新的xml文件的名称,该文件使用非常具体的命名约定,包括datatime,more和你一样在ftpserver上,然后将它写入名为User:newFile的SSIS变量。 xml文件的名称为:Something_YYYYMMDD.xml,因此是teI 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;
}
}
}
我想你可能要做类似的事情:)