使用T-SQL写出文本文件

时间:2011-02-09 06:49:02

标签: tsql sql-server-2008 text

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

这是一个如此小的任务,SSIS似乎有点过分 - 我只想使用运行.sql文件的计划任务。

我需要指导的地方是我需要在上次运行此任务时保留日期时间,然后使用它来在下次任务运行时过滤记录。我最初的想法是将日期时间存储在文本文件中,并在每次运行时将其更新(覆盖)为任务的一部分。

我可以使用T-SQL毫无问题地读取文件,但写回来让我陷入困境。我已经看到很多使用动态构建的bcp命令的例子,然后使用xp_cmdshell执行。麻烦的是,我正在部署的服务器上的安全性阻止了xp_cmdshell的使用。

所以,我的问题是,是否还有其他方法可以使用TSQL简单地将日期时间值写入文件,还是应该考虑采用不同的方法?

编辑:很高兴能够纠正SSIS“过度杀伤”......

3 个答案:

答案 0 :(得分:4)

您可以构建一个小型app或cmd文件,用于从调度程序包装SQL脚本的开头。在该应用程序中,您可以将日期和时间存储在一个文件中,供您下次加载时从SQL脚本中读取。

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

中读取datetime.txt的内容
sqlcmd YourScript.sql
sqlcmd -Q"select getdate()" -o datetime.txt

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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