Sql server 将T-SQL结果行写入单个文件

Sql server 将T-SQL结果行写入单个文件,sql-server,ssms,Sql Server,Ssms,我正在开发一个专有的数据仓库产品,该产品有一个元数据表,其中包含用于填充它的SQL查询。我需要从元数据表中提取每个查询,并将其保存到自己的.sql文件中,该文件根据它填充的表命名 大约有400个这样的查询,我想让它自动化,但我不知道一个好方法。有没有一种好方法可以逐行遍历结果集,并将输出写入文件 我正在尝试做的一个例子。假设我在结果集中返回了两行: 选择tableName,从包中提取查询 表名提取查询 表1从sourceTable1中选择* 表2从源表2中选择* 然后我需要将其保存到两个不同的文

我正在开发一个专有的数据仓库产品,该产品有一个元数据表,其中包含用于填充它的SQL查询。我需要从元数据表中提取每个查询,并将其保存到自己的.sql文件中,该文件根据它填充的表命名

大约有400个这样的查询,我想让它自动化,但我不知道一个好方法。有没有一种好方法可以逐行遍历结果集,并将输出写入文件

我正在尝试做的一个例子。假设我在结果集中返回了两行:

选择tableName,从包中提取查询

表名提取查询

表1从sourceTable1中选择*

表2从源表2中选择*


然后我需要将其保存到两个不同的文件中,即Table1.sql和Table2.sql,每个文件都包含返回的sql命令。

要展开@Andrew O'Brien的SSI和脚本建议:

步骤1:创建SSIS包

步骤2:添加数据流

步骤3:添加SQL源代码

步骤4:添加脚本组件

内部SQL组件:

选择变换

检查两列作为输入

编辑脚本:将此粘贴到其中:

    //This is the path to where you want the results stored
    string filePath = @"\\server\path\"; 
    string fileName = Row.tableName.ToString() + ".sql";

    System.IO.File.WriteAllText(Row.extractQuery.ToString(),filePath+fileName);

这将写出每个文件。

您可以使用BCP命令和光标来完成此操作

1确保在运行之前创建了目标文件夹

2确保

3确保SqlService帐户有权访问该文件夹

declare c cursor for
select tableName from packages

declare @cvar varchar(64)

open c
fetch next from c into @cvar

while @@FETCH_STATUS = 0
begin


DECLARE @OutputFile NVARCHAR(100) ,    @FilePath NVARCHAR(100) ,    @bcpCommand NVARCHAR(1000)

SET @bcpCommand = 'bcp "SELECT extractQuery FROM yourServer.dbo.packages where tableName = '''+ @cvar + '''" queryout '
SET @FilePath = 'C:\test\'
SET @OutputFile = @cvar + '.txt'
SET @bcpCommand = @bcpCommand + @FilePath + @OutputFile + ' -c -t, -T -S'+ @@servername
exec master..xp_cmdshell @bcpCommand

fetch next from c into @cvar

end
close c
deallocate c

您是想在SQLServerManagementStudio中的SQL中完成所有这些工作,还是可以编写脚本cmd、powershell或C命令行实用程序或其他什么?您的环境是什么?您可能还想考虑使用SSIS包和脚本组件。