在不使用BCP的情况下将T-SQL查询结果移动到文件中?

时间:2011-08-04 15:27:20

标签: sql sql-server tsql sql-server-2008

我想要做的是将一些查询结果输出到文件。基本上,当我查询我感兴趣的表时,我的结果看起来像这样:

HTML_ID    HTML_CONTENT
1          <html>...
2          <html>...
3          <html>...
4          <html>...
5          <html>...
6          <html>...
7          <html>...

字段HTML_CONTENT的类型为ntext,每个记录的值大约为500多个字符(包含HTML内容)。

我可以创建一个游标来将每个记录的内容移动到临时表或其他任何内容。 但我的问题是:如果不使用BCP,我将如何移动它?

而不是临时表

BCP不是一个选项,因为我们sysadmin已阻止对sys.xp_cmdshell的访问权限。

注意:我想要store each record's HTML content to individual files

我的sql版本是:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0

2 个答案:

答案 0 :(得分:0)

这个答案一直有效,直到你添加了对单个文件的要求

您可以从命令行运行SQL并将输出转储到文件中。可以使用以下实用程序。

以下是带有内联查询的SQLCMD的示例

sqlcmd -S ServerName -E -Q "Select GetDate() CurrentDateAndTime" > output.txt

您可以将查询保存到文件(QueryString.sql)并使用-i代替

sqlcmd -S ServerName -E -i QueryString.sql> output.txt

修改

使用SSIS

  • 创建包
  • 在包级别创建一个名为RecordsToOutput的变量,类型为
  • 使用EXECUTE SQL任务并将数据集恢复为RecordsToOutput
  • 使用For-Each循环遍历RecordsToOutput数据集
    • 在循环中,为数据集中的每个列创建一个变量(赋予它相同的名称)
    • 添加数据流任务
    • 使用OleDB源并使用SQL语句创建一行(包含您已有的数据)
    • 使用平面文件目的地写出行。
    • 在平面文件连接上使用表达式来更改循环中每行的目标文件的名称。

答案 1 :(得分:0)

您可以使用SSIS读取表数据并将表行的内容输出为文件。在SSIS包的数据流任务中可用的导出列转换可能有助于您这样做。

以下是一个示例,The Export Column Transformation

关于导出列转换的

MSDN documentation