如何读取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
依此类推。
在这方面的任何帮助,我是批量脚本新手,发现很难为此开发批处理脚本。
在此先感谢。
答
您可以创建一个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
创建的文件被视为如下
+0
感谢您的帮助..但没有执行权限在xp_cmdshell。将尽力获得所需的权限。虽然是否有任何其他的工作? – Anurag
为什么你不能在SQL中创建文件? –
不具有对SQL Server中扩展存储过程的执行权限。这就是为什么要在批处理脚本中做到这一点:( – Anurag