将表行中的数据推送到extern文件中

时间:2017-08-23 17:00:58

标签: sql-server tsql

我有一个表格标签,其中有很多列和行。
所有列名都存储在用逗号分隔的nvarchar变量中,例如

set @col_names = 'col_a,col_b,col_c'

现在我想将此表中的所有行推送到外部文件。 为此,我使用

set @cmd = 'echo '+' some text >>'+ @my_file_path;
EXEC master..xp_cmdshell @cmd;

我遇到的问题是:如何在 @cmd 变量中存储行内容,如:

val_a,val_b,val_c

例如:如果标签内容为:

col_a | col_b | col_c
------+-------+-------
 1a   |  1b   |  1c
 2a   |  2b   |  2c
 3a   |  3b   |  3c

我想要在我的外部文件文本中:

 (1a,1b,1c),
 (2a,2b,2c),
 (3a,3b,3c),

最后我的extern文件应该是可执行的sql代码..

2 个答案:

答案 0 :(得分:0)

有点黑客,但也许这会有所帮助

示例

Declare @col_name varchar(max) = 'col_a,col_b,col_c'
Declare @data     varchar(max) 

Create Table #Temp (X varchar(max))

Declare @SQL varchar(max) = '
Insert Into #Temp
Select stuff(replace((Select concat('','',char(13),''('','+replace(@col_name,',',','','',')+','')'') 
                       From  Tab 
                       For XML Path ('''')),''
'',char(13)),1,2,'''')
'
Exec(@SQL)

Select @data = X from #Temp

返回带有chr(13)的字符串...可选

(1a,1b,1c),
(2a,2b,2c),
(3a,3b,3c)

答案 1 :(得分:0)

您可以在此处阅读:https://docs.microsoft.com/en-us/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server,以编程方式导出数据的唯一工具是 bcp

替代方案(我每天使用)是创建Sql Server Assembly。您可以创建一个接收2个参数的CLR存储过程:

  • 查询命令和
  • 输出字符串。

事实上,我有CLR存储过程,用于将数据写入文件,将它们附加到邮件中,或通过FTP发送它们,调用Web服务等。对于Transact SQL中缺少的所有功能:(