如何在SQL中将参数传递给bcp命令行

时间:2018-08-02 11:53:50

标签: sql sql-server bcp

我已经浏览了很多帖子,但是似乎都没用,我一直遇到错误。

我首先尝试过这个:

exec master..xp_cmdshell'bcp ClientDB.dbo.SparePartsPriceList_Temp_Export out ' + @OutPutFolder + '\' + @DealerType +'-XP006.txt  -c -T -S DEV-PC\SQLEXPRESS'

第一个'+'出现错误:Incorrect syntax near '+'

然后我尝试了这个:

SET @SQLExport = 'bcp ClientDB.dbo.SparePartsPriceList_Temp_Export out ''' + @OutPutFolder + '''\''' + @DealerType +'''-XP006.txt  -c -T -S DEV-PC\SQLEXPRESS'

exec master..xp_cmdshell @SQLExport

但是当我执行存储过程时,出现以下错误:Procedure expects parameter 'command_string' of type 'varchar'.

我无法想象这是如此困难,但是我很可能错过了一些小东西。

请有人能告诉我我在想什么吗?任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

您无法将表达式传递给xp_cmdshell。您将需要使用动态SQL。这未经测试,但是...:

DECLARE @SQL nvarchar(MAX);

SET @SQL = N'EXEC master..xp_cmdshell ''bcp ClientDB.dbo.SparePartsPriceList_Temp_Export out ' + QUOTENAME(@OutPutFolder + '\' + @DealerType +'-XP006.txt','"') + N' -c -T -S DEV-PC\SQLEXPRESS''';

EXEC sp_executesql @SQL;

答案 1 :(得分:0)

发现了问题!我从这篇文章中得到的:https://www.sqlservercentral.com/Forums/1071530/xpcmdshell--Procedure-expects-parameter-commandstring-of-type-varchar

原因是因为您不能在xp_cmdshell中使用varchar(max)。一旦我将MAX更改为4000,它就会起作用。...