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