BCP导出疑问(三)

wing7742 2011-02-11 10:47:15

确切的说应该是拼装字符串的问题

查询语句为:
SELECT date = '日期',
no = '编号',
project = '项目',
flag = '是否成交'
UNION ALL
SELECT date,
no,
project,
flag = CASE WHEN STATE = 'T' THEN '成交'
ELSE '未成交'
END
FROM testdb..vi_project_del
WHERE TIME BETWEEN '2011-02-10 00:00:00' AND '2011-02-10 23:59:59'

动态拼装如下:
DECLARE @sql NVARCHAR(max)
SET @sql='select date=''日期'',no=''编号'',project=''项目'',flag=''是否成交''
union all
select date,no,project,flag=case when state=''T'' then ''成交'' else ''未成交'' end
from testdb..vi_project_del where time between '''+@time+' 00:00:00'' and '''+@time+' 23:59:59'''

问题1:虽然拼装出来了sql不过还是不明白这里各处的字符剥取方式
问题2:不明白问题1,所以出现
exec ('exec MASTER..xp_cmdshell ''bcp "'+@sql+'" queryout "'+@filename+'" -c -Sdb -U"sa" -P"pwd"'')

引号不完整





...全文
68 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wing7742 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wing7742 的回复:]
TO:(从零开始)
那么单双引号的混搭来剥取是否可行吗?
[/Quote]

貌似SQL的字符应该只支持单引号
晕头了
AcHerat 2011-02-11
  • 打赏
  • 举报
回复

DECLARE @sql NVARCHAR(max)
declare @time varchar(20)
set @time = '2011-01-11'
SET @sql='select date=''日期'',no=''编号'',project=''项目'',flag=''是否成交''
union all
select date,no,project,flag=case when state=''T'' then ''成交'' else ''未成交'' end
from testdb..vi_project_del where time between '''+@time+' 00:00:00'' and '''+@time+' 23:59:59'''

set @sql = 'exec MASTER..xp_cmdshell ''bcp "'+@sql+'" queryout " aa " -c -Sdb -U"sa" -P"pwd"'''

print @sql


/*
exec MASTER..xp_cmdshell 'bcp "select date='日期',no='编号',project='项目',flag='是否成交'
union all
select date,no,project,flag=case when state='T' then '成交' else '未成交' end
from testdb..vi_project_del where time between '2011-01-11 00:00:00' and '2011-01-11 23:59:59'" queryout " aa " -c -Sdb -U"sa" -P"pwd"'
*/
wing7742 2011-02-11
  • 打赏
  • 举报
回复
TO:(从零开始)
那么单双引号的混搭来剥取是否可行吗?
AcHerat 2011-02-11
  • 打赏
  • 举报
回复

exec ('exec MASTER..xp_cmdshell ''bcp "'+@sql+'" queryout "'+@filename+'" -c -Sdb -U"sa" -P"pwd"'')

--看你最后那个括号都是红色的,说明拼的字符还没结束,最后再加个 '

exec ('exec MASTER..xp_cmdshell ''bcp "'+@sql+'" queryout "'+@filename+'" -c -Sdb -U"sa" -P"pwd"''')
Xiao_Ai_Mei 2011-02-11
  • 打赏
  • 举报
回复
exec ('exec MASTER..xp_cmdshell ''bcp "'+@sql+'" queryout "'+@filename+'" -c -Sdb -U"sa" -P"pwd"''')

单引号中的2个单引号表示一个单引号
快溜 2011-02-11
  • 打赏
  • 举报
回复
第三季

--看不清楚的就print出来看看

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧