使用xp_cmdshell将所有表导出为单独的txt文件

时间:2017-01-05 16:52:04

标签: sql-server sql-server-2012 xp-cmdshell

我正在尝试从我的一个SQL Server数据库中导出一些数据。它有300多个表,我没有看到任何方法使用SSMS向导导出这些数据,因为它一次只能执行一个表。我需要使用分隔符“/”。所以我一直在玩xp_cmdshell,除了一件事之外,它几乎可以做我需要做的一切。

我需要它只输出这样的表名:table1.txt现在输出为[dbo]。[table1] .txt

Execute sp_MSforeachtable 'Execute master.dbo.xp_cmdshell ''sqlcmd -S SERVER\INSTANCE -E -d DB -q "SET NOCOUNT ON SELECT * FROM ?"''' -W -h-1 -o C:\DBA\?.txt -s "/"'''

3 个答案:

答案 0 :(得分:0)

这是一个诀窍

EXECUTE sp_MSforeachtable 'select ''?'' as org_string,replace(replace(''?'',''[dbo].['',''''),'']'','''') as result_string'

您需要在代码中添加上述逻辑。

注意:如果您的表名中包含[dbo].[]个字符,那么这可能会搞砸

答案 1 :(得分:0)

您可以使用cursor和bcp命令执行此操作。

or

答案 2 :(得分:0)

试试这个:

exec sp_MSforeachtable 'declare @query varchar(8000)=''sqlcmd -q "set nocount on;select * from ?" -o "''+''C:\DBA\''+replace(substring(''?'',charindex (''.'',''?'')+2,len(''?'')-1),'']'','''')+''.txt"'';
                            exec xp_cmdshell @query'