bcp导出语句中有两个Sql语句,两个语句的结果不能都导出。

时间:2021-06-12 01:01:34
只能导出第一个语句的结果。

因用到的变量多,不想做成存储过程.同时因为两个结果有不同的列.

16 个解决方案

#1


bcp是指什么意思?

#2


Error = [Microsoft][ODBC SQL Server Driver]函数序列错误
??

#3


有sql命令在bcp中不能使用。
我加了个set nocount on可以加set fmtonly on就不行

#4


--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

#5


EXEC master..xp_cmdshell 'bcp "set nocount on SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

这样导出的内容只是第一个select语句的内容,不包括后面一个语句的内容。现在我要的是两个结果合并成一个文件。

#6


EXEC master..xp_cmdshell 'bcp "set nocount on;SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname;SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

如果还不行,就只能先导到临时表,再用bcp了

#7


一样不行的。

#8


临时表没法用,我用的是生成xml的select语句

declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles for xml auto,elements; select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#9


怎么会没法用啊?

select * into #t from (select top 1 title_id from pubs..titles union all select top 1 title_id from pubs..titles) a

declare @cSql Varchar(200)
Select @cSql='bcp "select * from #t for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

这样不行?

#10


declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles for xml auto,elements union all select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#11


改;
declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles union all select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#12


以上语句测试通过。问题是我的sql语句是希望这样的

select '<?xml version="1.0" encoding="gb2312"?>' As cXml union all select top 1 title_id from pubs..titles for xml auto,elements

但上面的语句是通不过的。

#13


for xml auto,elements返回的不是记录集,所以不能用union all

我也想知道怎么插XML头文件.
帮你顶

#14


EXEC master..xp_cmdshell 'bcp "set nocount on SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

这样导出的内容只是第一个select语句的内容,不包括后面一个语句的内容。现在我要的是两个结果合并成一个文件。


--
好象你两句select都用的一个表,并且字段也相同的嘛,能不能做成一个view,然后bcp这个view呢?
反正view对bcp来说也是一个 "表" 嘛!

#15


实际上是有不同的字段。

#16


下面的是實現語句-   經過測試過的

master.dbo.xp_cmdshell  'bcp "select *  from test2.dbo.a ,test2.dbo.b"  queryout  f:\kkp.txt  -c -Sbe122 -Usa -P123'

-------select *  from test2.dbo.a ,test2.dbo.b  -- 是指sql查詢語句可以是多個表
-----Sbe122    是be122 服務器
-----Usa   ---是sa用戶

#1


bcp是指什么意思?

#2


Error = [Microsoft][ODBC SQL Server Driver]函数序列错误
??

#3


有sql命令在bcp中不能使用。
我加了个set nocount on可以加set fmtonly on就不行

#4


--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

#5


EXEC master..xp_cmdshell 'bcp "set nocount on SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

这样导出的内容只是第一个select语句的内容,不包括后面一个语句的内容。现在我要的是两个结果合并成一个文件。

#6


EXEC master..xp_cmdshell 'bcp "set nocount on;SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname;SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

如果还不行,就只能先导到临时表,再用bcp了

#7


一样不行的。

#8


临时表没法用,我用的是生成xml的select语句

declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles for xml auto,elements; select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#9


怎么会没法用啊?

select * into #t from (select top 1 title_id from pubs..titles union all select top 1 title_id from pubs..titles) a

declare @cSql Varchar(200)
Select @cSql='bcp "select * from #t for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

这样不行?

#10


declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles for xml auto,elements union all select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#11


改;
declare @cSql Varchar(200)
Select @cSql='bcp "select top 1 title_id from pubs..titles union all select top 1 title_id from pubs..titles for xml auto,elements" queryout "c:\mail.xml" -c -q -S"127.0.0.1" -U"sa" -P"sa"'
--select @cSql
Exec Master..Xp_CmdShell @cSql
Exec Master..Xp_CmdShell 'type c:\mail.xml'

#12


以上语句测试通过。问题是我的sql语句是希望这样的

select '<?xml version="1.0" encoding="gb2312"?>' As cXml union all select top 1 title_id from pubs..titles for xml auto,elements

但上面的语句是通不过的。

#13


for xml auto,elements返回的不是记录集,所以不能用union all

我也想知道怎么插XML头文件.
帮你顶

#14


EXEC master..xp_cmdshell 'bcp "set nocount on SELECT top 1 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go SELECT top 2 au_fname, au_lname FROM pubs..authors ORDER BY au_lname go" queryout "c:\test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'

这样导出的内容只是第一个select语句的内容,不包括后面一个语句的内容。现在我要的是两个结果合并成一个文件。


--
好象你两句select都用的一个表,并且字段也相同的嘛,能不能做成一个view,然后bcp这个view呢?
反正view对bcp来说也是一个 "表" 嘛!

#15


实际上是有不同的字段。

#16


下面的是實現語句-   經過測試過的

master.dbo.xp_cmdshell  'bcp "select *  from test2.dbo.a ,test2.dbo.b"  queryout  f:\kkp.txt  -c -Sbe122 -Usa -P123'

-------select *  from test2.dbo.a ,test2.dbo.b  -- 是指sql查詢語句可以是多個表
-----Sbe122    是be122 服務器
-----Usa   ---是sa用戶