VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1081|回复: 7

在线等待各位答复,怎么写目录名称是变量的bcp语句呢?

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-16 15:00:01 | 显示全部楼层 |阅读模式
declare @user varchar(100)
declare @pw varchar(100)
set @user = 'sa'
set @pw = '16898758'
declare @qushi varchar(20)
declare @sheng varchar(20)
declare @sql varchar(1000)
declare cur_qushi scroll cursor for select distinct 区市 from 手机话段移动话段 for read only
open cur_qushi
fetch next from cur_qushi into @qushi
while @@fetch_status = 0
begin
set @sql = 'select Col001 from mobile.dbo.blacklist where left(Col001, 7) in(select 号段 from mobile.dbo.手机话段移动话段 where 区市 = ''' + @qushi + ''')'
exec outsheng @qushi1=@qushi, @sheng1=@sheng output
set @sql = 'bcp "' + @sql + '" queryout D:\numbers\'+@sheng+'\' + @qushi + '.txt -c -U' + @user + ' -P' + @pw
exec master..xp_cmdshell @sql
fetch next from cur_qushi into @qushi
end
close cur_qushi
deallocate cur_qushi


请大家指正,我的错误是:SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver]无法打开 BCP 主数据文件
NULL

我的手机话段移动话段表格式为:
区号     省份     区市      号段
0510        江苏        无锡        1340000
0510        江苏        无锡        1340001
0510        江苏        无锡        1340002
0510        江苏        无锡        1340003
0510        江苏        无锡        1340004
025        江苏        南京        1340005
025        江苏        南京        1340006
025        江苏        南京        1340007
0511        江苏        镇江        1340008
我的blacklist表的格式为:
Col001
13709499546
13999045904
13566036035
13608334588
13575856588
13883743004
13977378668
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-20 20:45:01 | 显示全部楼层
我的outsheng 存储过程代码如下:

USE mobile
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'outsheng' AND type = 'p')
   DROP procedure outsheng
go
create procedure outsheng
@qushi1 varchar(20),
@sheng1 varchar(20) output
as
select  @sheng1=省份  from mobile.dbo.手机话段移动话段 where 区市=@qushi1
return
go
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-21 18:18:02 | 显示全部楼层
不知道错误
回复

使用道具 举报

0

主题

30

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-1-26 10:18:01 | 显示全部楼层
--搞定了
--BCP不能帮你建立目录
declare @user varchar(100)
declare @pw varchar(100)
set @user = 'sa'
set @pw = '16898758'
declare @qushi varchar(20)
declare @sheng varchar(20)
declare @mdsql varchar(1000)
declare @sql varchar(1000)
declare cur_qushi scroll cursor for select distinct 区市 from 手机话段移动话段 for read only
open cur_qushi
fetch next from cur_qushi into @qushi
while @@fetch_status = 0
begin
set @sql = 'select Col001 from mobile.dbo.blacklist where left(Col001, 7) in(select 号段 from mobile.dbo.手机话段移动话段 where 区市 = ''' + @qushi + ''')'
exec outsheng @qushi1=@qushi, @sheng1=@sheng output
set @mdsql ='if not exist D:\numbers\'+@sheng+' md D:\numbers\'+@sheng
--print(@mdsql)
exec master..xp_cmdshell @mdsql
set @sql = 'bcp "' + @sql + '" queryout D:\numbers\'+@sheng+'\' + @qushi + '.txt -c -U' + @user + ' -P' + @pw
--print(@sql)
exec master..xp_cmdshell @sql
fetch next from cur_qushi into @qushi
end
close cur_qushi
deallocate cur_qushi
回复

使用道具 举报

0

主题

114

帖子

69.00

积分

新手上路

Rank: 1

积分
69.00
发表于 2020-1-26 11:00:02 | 显示全部楼层
学习了.
回复

使用道具 举报

0

主题

30

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-1-26 19:36:01 | 显示全部楼层
--假设目录D:\numbers已存在
--建立测试数据
if object_id('手机话段移动话段') is not null drop table 手机话段移动话段
create table 手机话段移动话段(区号 varchar(100),省份 varchar(100),区市 varchar(100),号段 varchar(100))
insert 手机话段移动话段
select '0510','江苏','无锡','1340000' union all
select '0510','江苏','无锡','1340001'union all
select '0510','江苏','无锡','1340002'union all
select '0510','江苏','无锡','1340003'union all
select '0510','江苏','无锡','1340004'union all
select '025','江苏','南京','1340005'union all
select '025','江苏','南京','1340006'union all
select '025','江苏','南京','1340007'union all
select '0511','江苏','镇江','1340008'union all
select '020','广东','广州','1300008'
go

if object_id('blacklist') is not null drop table blacklist
create table blacklist(Col001 varchar(100))
insert blacklist
select '13400009546' union all
select '13999045904' union all
select '13566036035' union all
select '13608334588' union all
select '13575856588' union all
select '13883743004' union all
select '13977378668' union all
select '13000088668'
go

--建立存储过程
USE mobile
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'outsheng' AND type = 'p')
   DROP procedure outsheng
go
create procedure outsheng
@qushi1 varchar(20),
@sheng1 varchar(20) output
as
select  @sheng1=省份  from mobile.dbo.手机话段移动话段 where 区市=@qushi1
return
go

--写游标
declare @user varchar(100)
declare @pw varchar(100)
set @user = 'sa'
set @pw = 'ggs'
declare @qushi varchar(20)
declare @sheng varchar(20)
declare @mdsql varchar(1000)
declare @sql varchar(1000)
declare cur_qushi scroll cursor for select distinct 区市 from 手机话段移动话段 for read only
open cur_qushi
fetch next from cur_qushi into @qushi
while @@fetch_status = 0
begin
set @sql = 'select Col001 from mobile.dbo.blacklist where left(Col001, 7) in(select 号段 from mobile.dbo.手机话段移动话段 where 区市 = ''' + @qushi + ''')'
exec outsheng @qushi1=@qushi, @sheng1=@sheng output
set @mdsql ='if not exist D:\numbers\'+@sheng+' md D:\numbers\'+@sheng
--print(@mdsql)
exec master..xp_cmdshell @mdsql
set @sql = 'bcp "' + @sql + '" queryout D:\numbers\'+@sheng+'\' + @qushi + '.txt -c -U' + @user + ' -P' + @pw
--print(@sql)
exec master..xp_cmdshell @sql
fetch next from cur_qushi into @qushi
end
close cur_qushi
deallocate cur_qushi

--查看结果
--到D:\numbers目录可以看到“江苏”和“广东”两个目录
--“江苏”目录里有两个文件:南京.txt、无锡.txt(内容:13400009546)
--“江苏”目录里有一个文件:广东.txt(内容:13000088668)
回复

使用道具 举报

0

主题

7

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-28 11:54:01 | 显示全部楼层
路径加引号:
set @sql = 'bcp "' + @sql + '" queryout "D:\numbers\'+@sheng+'\' + @qushi + '.txt" -c -U' + @user + ' -P' + @pw
回复

使用道具 举报

1

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-2-23 12:30:01 | 显示全部楼层
exec xp_cmdshell 'bcp "select * from recodata.dbo.章节表"
queryout "c:\11.txt" -c -Usa -Sserver -P,'
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表