我正在开发一种专有数据仓库产品,该产品具有一个元数据表,其中包含用于填充它的SQL查询。我需要从元数据表中提取每个查询并将其保存到自己的.sql文件中,该文件根据它填充的表命名。
这些查询大约有400个,我想自动化它,但我不知道这样做的好方法。有没有一种很好的方法可以逐行迭代结果集,并将输出写入文件?
我正在尝试做的一个例子。假设我在结果集中返回了两行:
select tableName, extractQuery from packages;
tableName extractQuery
表1从sourceTable1中选择*;
表2从sourceTable2中选择*;
然后我需要将它保存到两个不同的文件Table1.sql和Table2.sql中,每个文件都包含返回的SQL命令。
答案 0 :(得分:0)
扩展@Andrew O'Brien的SSIS和脚本建议:
步骤1:创建SSIS包。
第2步:添加数据流
第3步:添加SQL源
步骤4:添加脚本组件
内部SQL组件:
选择转化
检查您的2列作为输入
编辑脚本:将其粘贴在那里:
//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);
这应该写出每个文件。
答案 1 :(得分:0)
您可以使用BCP命令和光标执行此操作。
1)确保在运行
之前创建目标文件夹2)确保command line utilities are enabled
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