我已经浏览了很多帖子,但是似乎都没用,我一直遇到错误。
我首先尝试过这个:
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'.
我无法想象这是如此困难,但是我很可能错过了一些小东西。
请有人能告诉我我在想什么吗?任何帮助将不胜感激。
谢谢!
答案 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,它就会起作用。...