如何在SQL Server中向bcp命令传递参数

5

我想将查询结果发送到文件中,所以尝试使用bcp命令。但是无法传递任何参数给它。它显示错误。

EXEC xp_cmdshell 'bcp "SELECT * FROM CG.dbo.cdyy where EndTime between     DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,'+@date+'),0)) and DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,1,'+@date+')+1,0))  " queryout "D:\cdr_cg.txt" -T -c -t,'

将来请发布实际的错误信息。 - Nick.McDermaid
1个回答

5
在调用master..xp_cmdshell之前,请将您的参数放置在前面。
DECLARE @date varchar(10) = '20130311',
        @bcp varchar(8000)

SELECT @bcp = 'bcp "SELECT * FROM CG.dbo.cdyy WHERE EndTime between DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,''' + @date + '''),0)) AND DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,1,'''  + @date + ''')+1,0))  " queryout "D:\cdr_cg.txt" -T -c -t,'

EXEC master..xp_cmdshell @bcp

但是它报错了。FYI,我将@ date和@ bcp声明为varchar类型。 "Procedure xp_cmdshell, Line 1 该存储过程期望参数'command_string'的类型为'varchar'。" - Kamal
2
这个错误是因为您在声明变量时使用了varchar(max)。您如何声明@date和@bcp的varchar类型?请改用date varchar(10),bcp varchar(8000)代替date varchar(max),bcp varchar(max)。 - Aleksandr Fedorenko
非常感谢,你救了我的一天,是的,我犯了你指出的同样的错误 :) - Kamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接