BCP命令的开关 -Q

------------------------------------------------------------------------

-- Author: happyflystone

-- Date : 2009-04-14 16:39:19

-- Ver: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)

-- Apr 14 2006 01:12:25

-- Copyright (c) 1988-2005 Microsoft Corporation

-- Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

-- Blog:blog.csdn.net/happyflystone

-- 注意:转载保留此信息

--------------------------------------------------------------------------

先看看bcp的帮助吧

exec xp_cmdshell 'bcp/?’

/*

output

--------------------------------------

用法: bcp {dbtable | query} {in | out | queryout | format} datafile

[-m maxerrors] [-f formatfile] [-e errfile]

[-F firstrow] [-L lastrow] [-b batchsize]

[-n native type] [-c character type] [-w wide character type]

[-N keep non-text native] [-V file format version] [-q quoted identifier]

[-C code page specifier] [-t field terminator] [-r row terminator]

[-i inputfile] [-o outfile] [-a packetsize]

[-S server name] [-U username] [-P password]

[-T trusted connection] [-v version] [-R regional enable]

[-k keep null values] [-E keep identity values]

[-h "load hints"]

NULL

*/

测试环境:

create database [test-2009]

go

use [test-2009]

go

create table ta(id int)

insert ta select 1

insert ta select 2

go

好,利用bcp输出ta表的数据,(注意:我只用了信息连接,测试时自行修改,可使用-S –U –P,同时注意如果有多个实例时记得使用-S开关)

exec xp_cmdshell 'bcp test-2009.dbo.ta out "c:\t.txt" -T -c -Sflystone\sql2005 '

/*

output

------------------------------------

SQLState = 37000, NativeError = 102

Error = [Microsoft][ODBC SQL Server Driver][SQL Server]'-' 附近有语法错误。

NULL

*/

好嘛,这个错误很好搞定的呀,加一个[]就可以了呀

exec xp_cmdshell 'bcp [test-2009].dbo.ta out "c:\t.txt" -T -c -Sflystone\sql2005 '

/*

output

-------------------------------------------

SQLState = 37000, NativeError = 4060

Error = [Microsoft][ODBC SQL Server Driver][SQL Server]无法打开登录所请求的数据库"[test-2009]"。登录失败。

NULL

*/

晕,无法登录,这不是胡说嘛,不过你要是用queryout测试却是成功的

exec xp_cmdshell 'bcp "select * from [test-2009].dbo.ta" queryout "c:\t.txt" -T -c -Sflystone\sql2005 '

/*

output

------------------------------------

NULL

开始复制...

NULL

已复制了4 行。

数据包的大小(字节): 4096

时钟时间(毫秒): 10

NULL

*/

那么如何直接使用表名导出数据呢,好,下面我看这个-q这个开关项,先给出解决方案

exec xp_cmdshell 'bcp "test-2009".dbo.ta out "c:\t.txt" -T -c -Sflystone\sql2005 -q'

/*

output

-----------------------------------------

NULL

开始复制...

NULL

已复制了4 行。

数据包的大小(字节): 4096

时钟时间(毫秒): 10

NULL

*/

使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。将由三部分组成的整个表名或视图名用英文双引号 ("") 括起来。 若要指定包含空格或单引号的数据库名称,必须使用 -q 选项。其实这和对象名中包括‘-‘也不在备注说明中呀,可是事实上却可以解决这个问题。

你可能感兴趣的:(sql,C++,c,SQL Server,XP)