当前位置: 代码迷 >> Sql Server >> 存储过程BCP语句转义解决方案
  详细解决方案

存储过程BCP语句转义解决方案

热度:75   发布时间:2016-04-24 09:50:42.0
存储过程BCP语句转义
EXEC master..xp_cmdshell 'BCP "SELECT  * FROM surf_rawdb.dbo.TABLE_BACKUP where TABLEFIELD  BETWEEN ''20140801000000''  and  ''20140831235959''" queryout e:\sqldataback\abc.txt   -t -c -U "sa" -P "11111"';

上面语句在查询窗口执行是没有问题的,现在要拿到存储过程中动态拼SQL,用EXEC命令执行。
其中:TABLE_BACKUP  TABLEFIELD   20140801000000   20140831235959  abc.txt   
这五个使用参数扭替换,实在是换不明白了,帮忙支个招。。。
------解决思路----------------------
引用:
EXEC master..xp_cmdshell 'BCP "SELECT  * FROM surf_rawdb.dbo.'+ @tablename +' where '+ @fieldname+'  BETWEEN '''+@begintime+'''  and  '''+@endtime+'''" queryout e:\sqldataback\'+@filename+'   -t -c -U "sa" -P "1111"';


+ @tablename在+号处提示语法错误~~

CREATE PROCEDURE PROCNAME
@tablename NVARCHAR(128)
,@columnname NVARCHAR(128)
,@minvalue nVARCHAR(50)
,@maxvalue nVARCHAR(50)
,@filename NVARCHAR(128)
AS
BEGIN
DECLARE @CMD NVARCHAR(4000)
SET @CMD='BCP "SELECT  * FROM surf_rawdb.dbo.'+@tablename+' where '+@columnname+'  BETWEEN '''+@minvalue+'''  and  '''+@maxvalue+'''" queryout e:\sqldataback\'+@filename+'   -t -c -U "sa" -P "11111"'
EXEC master..xp_cmdshell @CMD
END
  相关解决方案