我已利用如下方式将数据表中的数据 导出到c:\tab.xls文件中,
exec master..xp_cmdshell 'bcp "select * from NT..tab1 where datetime> '2010-10-27 13:26'" queryout c:\tab.xls -c -Usa -P123456' 但是不知道如何把表名,时间,导出文件作为参数传递过去??
试了几种方式都不行,还望大侠赐教!
exec master..xp_cmdshell 'bcp "select * from NT..tab1 where datetime> '2010-10-27 13:26'" queryout c:\tab.xls -c -Usa -P123456' 但是不知道如何把表名,时间,导出文件作为参数传递过去??
试了几种方式都不行,还望大侠赐教!
解决方案 »
- 不备份master数据库,只备份自建的数据库,会导致备份无法恢复吗?
- 求一条sql:查询每种商品的最新价格
- 关于存储过程返回值的问题
- 求一SQL语句,谢谢!
- ◆请问这条SQL语句怎么写? ◆
- 如何赋于某数据库用户(如Public)所有用户表的Select和update权限
- 为什么执行存储过程时出现 消息137,级别15,状态2,第22 必须声明标量变量 "@userId"
- sql server的自增量类型当操作频繁的时候会造成数据库锁住吗?
- DTS的包在分析器里能调用吗?怎么调用呢?或是在存储过程里?
- 有一个农村程序系统,每个村用一个数据库整个市有2000~3000个村,数据库放服务器在市里.这样server要建2000~3000个数据库,不知道这样是否可
- 求一段SQL文
- Sql 2005 如何远程备份数据库
set @sql ='exec master..xp_cmdshell ''bcp ' + 参数+..
exec (@sql)
你需要在excel里导出表名?时间,导出的文件名吗
但是变换了几种方式,尝试后仍然语法错误:( --小笨
期望大侠写完整些,多谢多谢~~
declare @s varchar(1000)
set @s='select * from NT..tab1 where [datetime]>''2010-10-27 13:26'''set @s='
exec master..xp_cmdshell ''BCP "'+@s+'" queryout c:\tab.xls -c -U sa -S 机器名\实例名 -P 123456'
declare @t datetime
set @s='select * from NT..tab1 where '+@t'+>''2010-10-27 13:26'''set @s='
exec master..xp_cmdshell ''BCP "'+@s+'" queryout c:\tab.xls -c -U sa -S 机器名\实例名 -P 123456'
declare @str varchar(1000)
set @ii=5
set @str='exec master..xp_cmdshell ''bcp "select * from teststudent..aaa where ii>'+str(@ii)+'" queryout c:\tab.xls -c -Usa -P123'''
--print @str
exec(@str)
declare @ii int
declare @str varchar(1000)
declare @tabName varchar(30)
set @tabName='aaa'
set @ii=5
set @str='exec master..xp_cmdshell ''bcp "select * from teststudent..'+@tabName+' where ii>'+str(@ii)+'" queryout c:\tab.xls -c -Usa -P123'''
--print @str
exec(@str)
declare @tabName varchar(30)
declare @path varchar(30)
declare @con varchar(50)set @tabName='users'
set @con = '2010-12-12 20:02:04'
set @path = 'c:\tab.txt'
set @str='exec master..xp_cmdshell ''bcp "select * from NTC..' +@tabName+ ' " queryout '+ @path + ' -c -Usa -P123456'''
exec(@str)上述方式能够正确导出数据了;
但在where子句中加上时间条件后报错,下述方式仅增加了'where datetime> ' + @con +' 条件,还没发现哪里错了declare @str varchar(1000)
declare @tabName varchar(30)
declare @path varchar(30)
declare @con varchar(50)set @tabName='users'
set @con = '2010-12-12 20:02:04'
set @path = 'c:\tab.txt'
set @str='exec master..xp_cmdshell ''bcp "select * from NTC..' +@tabName+ 'where datetime> ' + @con +' " queryout '+ @path + ' -c -Usa -P123456'''
exec(@str)提示的错误是:
SQLState = 42000, NativeError = 102
Error = [Microsoft][SQL Native Client][SQL Server]'>' 附近有语法错误。
SQLState = 42000, NativeError = 8180
Error = [Microsoft][SQL Native Client][SQL Server]未能准备语句。
NULL
exec(@str)
改为
set @str='exec master..xp_cmdshell ''bcp "select * from NTC..' +@tabName+ 'where datetime> ''' + @con +''' " queryout '+ @path + ' -c -Usa -P123456'''然后试试
print @str 打印出来看看结果是什么
exec(@str)
exec master..xp_cmdshell 'bcp "select * from NTC..users where datetime> '2010-12-12 20:02:04' " queryout c:\tab.txt -c -Usa -P123456'奇怪,跟问题里的写法一样,问题里的语句也出现语法错误,--- 之前的测试有误:(
现在只要加上where条件就报错exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 " queryout c:\tab.txt -c -Usa -P123456' ----OK直接在命令行采用下列方式也能正确导出
bcp "select * from NTC..tab1com11 where datetime> '2010-12-12 20:02:04' " queryout c:\tab.txt -c -Usa -P123456
麻烦大侠也在电脑上试下,我试试再更新
A组:
exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 where datetime> getdate()-365" queryout c:\tab.txt -c -Usa -P123456'
exec master..xp_cmdshell 'bcp "select * from NTC..users where user_id = 1 " queryout c:\tab.xls -c -Usa -P123456' B组:
exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 where datetime> ''2010-12-27 13:26:38.700'' " queryout c:\tab.txt -c -Usa -P123456'
exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 where RECVDATA = ''7777'' " queryout c:\tab.txt -c -Usa -P123456'
上述4组都测试正确。
declare @tabName varchar(30)
declare @path varchar(30)
declare @con varchar(50)set @tabName='tab1com11'
set @con = '2010-12-12 20:02:04'
set @path = 'c:\tab.txt'
set @str='exec master..xp_cmdshell ''bcp "select * from NTC..' + @tabName + ' where datetime> ''' + @con +''' " queryout '+ @path + ' -c -Usa -P123456'''
print @str
exec(@str)
上述@str的打印输出为:
exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 where datetime> '2010-12-12 20:02:04' " queryout c:\tab.txt -c -Usa -P123456'
那按照两层引号的结论,再加一层引号,也就是给@con加引号了
set @con = ‘'2010-12-12 20:02:04'’所有语句为:
declare @str varchar(1000)
declare @tabName varchar(30)
declare @path varchar(30)
declare @con varchar(50)set @tabName='tab1com11'
set @con = '''2010-12-12 20:02:04'''
set @path = 'c:\tab.txt'
set @str='exec master..xp_cmdshell ''bcp "select * from NTC..' + @tabName + ' where datetime> ''' + @con +'''" queryout '+ @path + ' -c -Usa -P123456'''
print @str
exec(@str)
打印输出为:
exec master..xp_cmdshell 'bcp "select * from NTC..tab1com11 where datetime> ''2010-12-12 20:02:04''" queryout c:\tab.txt -c -Usa -P123456'
此时也得到正确结果了。不过,没有搞明白这些括号是怎么匹配的,怎么只需多一层括号,@con条件里却需要多两层括号???