Tsql 使用T-SQL写入文本文件

Tsql 使用T-SQL写入文本文件,tsql,sql-server-2008,text,Tsql,Sql Server 2008,Text,我正在使用TSQL创建一个基本数据传输任务,从一个数据库中检索比给定日期时间值更新的某些记录,并将它们加载到另一个数据库中。这将在一天中周期性地发生 这是一个如此小的任务,以至于SSIS看起来有点过头了——我只想使用一个运行.sql文件的计划任务 我需要的指导是,我需要保留上次运行此任务时的datetime,然后在下次运行此任务时使用它筛选记录。我最初的想法是将datetime存储在一个文本文件中,并在每次运行任务时更新并覆盖它 我可以使用T-SQL毫无问题地读入文件,但写回文件让我陷入困境。我

我正在使用TSQL创建一个基本数据传输任务,从一个数据库中检索比给定日期时间值更新的某些记录,并将它们加载到另一个数据库中。这将在一天中周期性地发生

这是一个如此小的任务,以至于SSIS看起来有点过头了——我只想使用一个运行.sql文件的计划任务

我需要的指导是,我需要保留上次运行此任务时的datetime,然后在下次运行此任务时使用它筛选记录。我最初的想法是将datetime存储在一个文本文件中,并在每次运行任务时更新并覆盖它

我可以使用T-SQL毫无问题地读入文件,但写回文件让我陷入困境。我见过很多使用动态构建的bcp命令的示例,然后使用xp\u cmdshell执行该命令。问题是,我部署的服务器上的安全性阻止了xp_cmdshell的使用

所以,我的问题是,有没有其他方法可以简单地使用TSQL将日期时间值写入文件,或者我应该考虑另一种方法


编辑:很高兴被纠正SSI的过度使用…

为什么要使用文本文件。如果使用TSQL并从表中读取数据,请保持一致并写入同一数据库。例如,创建一个表来存储上次查询时间

您确定需要文件吗?如果您可以使用表存储日期,并且您可以访问这两个数据库:

set xact_abort on begin transaction insert database2.dbo.myTable (...) select ... from database1.dbo.myTable where database1.dbo.myTable.someDate > (select lastRunTime from database1.dbo.myTransferDate) update database1.dbo.myTransferDate set lastRunTime = getdate() commit transaction
您可以构建一个小应用程序或cmd文件,用于从调度程序包装SQL脚本的开始部分。在该应用程序中,您可以将日期和时间存储在文件中,以便下次加载SQL脚本时从中读取

我相信这可以做得更好,但只是为了向您展示这个想法,这里是您可以使用的命令文件的内容。从YourScript.sql中读取datetime.txt的内容

sqlcmd YourScript.sql
sqlcmd -Q"select getdate()" -o datetime.txt

我可以看出这将是理想的,但要做到这一点,我需要创建一个新的数据库来存储表-这两个数据库都支持专有应用程序,因此我不能在其中任何一个中创建表。在不同的模式中如何?我认为改变交付的对象通常是个坏主意,但添加新对象几乎没有影响。如果它在另一个模式中,就不会在交付的对象中“丢失”它。我开始认为为这项任务创建一个专用数据库可能是值得的,这样我就可以按照你和卡尔的建议去做。太棒了,这正是我需要的。谢谢