如何读取select语句的输出并将其分配给循环中的批处理文件中的各个参数

问题描述:

我有一个场景,我需要将select语句的结果传递给批处理脚本,然后使用这些值生成另一个文件。如何读取select语句的输出并将其分配给循环中的批处理文件中的各个参数

SQL查询:

Select SrcName, TrgName from dbo.t_src_trg_ref where Loadstatus='Assinged' 

O/P此查询是这样的:

SrcName | TrgName 
src1 | trg1 
src2 | trg2 
src3 | trg3 

等等

批处理脚本应该阅读的输出,并为每一个文本文件排成一个循环,文件的内容应该是这样的:

file1.txt 
$$src=src1 
$$trg=trg1 

file2.txt 
$$src=src2 
$$trg=trg2 

file3.txt 
$$src=src3 
$$trg=trg3 

依此类推。

在这方面的任何帮助,我是批量脚本新手,发现很难为此开发批处理脚本。

在此先感谢。

+0

为什么你不能在SQL中创建文件? –

+0

不具有对SQL Server中扩展存储过程的执行权限。这就是为什么要在批处理脚本中做到这一点:( – Anurag

您可以创建一个SQL cursor则游标循环码,使用和xp_cmdshell过程SQL BCP命令中,您可以create text files从定制数据

SQL Server数据库。例如,下面的使用光标的代码,你可以创建文本文件在它的采样数据

DECLARE @sql VARCHAR(1000) 

DECLARE @name sysname 

DECLARE mycursor CURSOR FAST_FORWARD FOR SELECT name FROM sys.tables 
OPEN mycursor 
FETCH NEXT FROM mycursor INTO @name 

WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @sql = 'bcp "select ''' + replace(@name,'''','''''') + '''" queryout "c:\temp\' + @name + '.txt" -c -UTF8 -T -Slocalhost"' 
EXEC master..xp_cmdshell @sql 

FETCH NEXT FROM mycursor INTO @name 
END 

CLOSE mycursor 
DEALLOCATE mycursor 

创建的文件被视为如下

enter image description here

+0

感谢您的帮助..但没有执行权限在xp_cmdshell。将尽力获得所需的权限。虽然是否有任何其他的工作? – Anurag