我有一个表格标签,其中有很多列和行。
所有列名都存储在用逗号分隔的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代码..
答案 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中缺少的所有功能:(