我使用SSMS中的任务,导出数据菜单导出数据。我想将导出保存为SSIS包。我唯一的问题是我需要今天的文件名日期。我知道在SSIS中你可以用表达式来做到这一点。
但是当在框中输入文件名时,我该如何写出来?
PtSurveyList_'getdate()'?
系统知道我希望getdate()函数不是实际单词的正确语法是什么?
答案 0 :(得分:0)
导入/导出向导是一个简化的编辑器,用于创建SSIS包。与使用BIDS / SSDT创建程序包没有什么不同(除非您使用的是SQL Server Express Edition,而您没有许可保存生成的SSIS程序包,只执行它)。
要回答您的问题,您无法直接使用导入/导出向导来完成您的要求。
使用导入导出向导,保存SSIS包,然后使用BIDS / SSDT进行编辑。除非您是在2005/2008,否则您应该能够从Microsoft网站下载正确版本的SSDT并在本地编辑您的软件包。在提供的屏幕截图中,您不需要应用逻辑,您需要将Expression应用于Flat File Connection Manager的ConnectionString属性。
更好的方法是不在表达式中构建日期逻辑。在由于修补,文件迟交等原因导致服务器停机一天的情况下,这会变得很脆弱,现在您有两个要处理的文件,而您构建的只查找“今天”的文件。现在是什么 - 改变文件名;改变服务器时间,编辑你的包裹?而是使用Foreach(文件)枚举器来获取要处理的文件。您可以在文件规范中使用通配符来限制仅限于PTSurveyList文件。然后,显然,使用文件系统任务将已处理的文件存档/移出源文件夹,这样就不会进行双重处理。
按原样使用导入/导出向导。它总是查找名为PTSurveyList.csv的文件。如果您需要今天附加到导入数据的日期,请使用默认约束GETDATE()
向目标表添加一列。这将确保您在表格中处理已处理/今天的日期。
然后,您需要使用操作系统级工具/脚本/ SQL代理来处理从那里识别当前日期文件和任何文件操作。我会去PowerShell,但你可以用DOS批处理脚本完成这个,虽然它会更加丑陋。
Pseudologic
通过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);