SSMS导入/导出向导,其中包含今天的日期文件名

时间:2016-10-03 14:35:55

标签: sql sql-server ssis

我使用SSMS中的任务,导出数据菜单导出数据。我想将导出保存为SSIS包。我唯一的问题是我需要今天的文件名日期。我知道在SSIS中你可以用表达式来做到这一点。

但是当在框中输入文件名时,我该如何写出来? PtSurveyList_'getdate()'?

系统知道我希望getdate()函数不是实际单词的正确语法是什么?

SSMS export Wizard

1 个答案:

答案 0 :(得分:0)

导入/导出向导是一个简化的编辑器,用于创建SSIS包。与使用BIDS / SSDT创建程序包没有什么不同(除非您使用的是SQL Server Express Edition,而您没有许可保存生成的SSIS程序包,只执行它)。

要回答您的问题,您无法直接使用导入/导出向导来完成您的要求。

选项1

使用导入导出向导,保存SSIS包,然后使用BIDS / SSDT进行编辑。除非您是在2005/2008,否则您应该能够从Microsoft网站下载正确版本的SSDT并在本地编辑您的软件包。在提供的屏幕截图中,您不需要应用逻辑,您需要将Expression应用于Flat File Connection Manager的ConnectionString属性。

更好的方法是在表达式中构建日期逻辑。在由于修补,文件迟交等原因导致服务器停机一天的情况下,这会变得很脆弱,现在您有两个要处理的文件,而您构建的只查找“今天”的文件。现在是什么 - 改变文件名;改变服务器时间,编辑你的包裹?而是使用Foreach(文件)枚举器来获取要处理的文件。您可以在文件规范中使用通配符来限制仅限于PTSurveyList文件。然后,显然,使用文件系统任务将已处理的文件存档/移出源文件夹,这样就不会进行双重处理。

选项2

按原样使用导入/导出向导。它总是查找名为PTSurveyList.csv的文件。如果您需要今天附加到导入数据的日期,请使用默认约束GETDATE()向目标表添加一列。这将确保您在表格中处理已处理/今天的日期。

然后,您需要使用操作系统级工具/脚本/ SQL代理来处理从那里识别当前日期文件和任何文件操作。我会去PowerShell,但你可以用DOS批处理脚本完成这个,虽然它会更加丑陋。

Pseudologic

  1. 查找最新的PTSurveyList_yyyymmdd.csv
  2. 使用覆盖复制到PTSurveyList.csv
  3. 运行SSIS包
  4. 转到存档/ PTSurveyList_yyyymmdd.csv
  5. 删除PTSurveyList.csv
  6. 通过xp_cmdshell解决动态日期的“技巧”是动态构建执行字符串。大约

    DECLARE @Command nvarchar(4000);
    SELECT @Command = N'EXEC master.dbo.xp_cmdshell ''rename "C:\CentOS_Share\PTSurveyList_.csv" "PTSurveyList_' + CONVERT(char(10), CURRENT_TIMESTAMP, 121) + '.csv"''';
    EXEC(@command);
    

    当然,您可以遇到double quote issue with xp_cmdshell