【问题标题】:How to Pass Parameter to bcp command line in SQL如何在 SQL 中将参数传递给 bcp 命令行
【发布时间】:2018-08-02 11:53:49
【问题描述】:

我浏览了很多帖子,但似乎没有一个有效,我不断收到错误。

我第一次尝试这个:

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'.

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

请有人告诉我我错过了什么?任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: sql sql-server bcp


    【解决方案1】:

    您不能将表达式传递给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;
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-25
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-01
        • 2020-08-02
        相关资源
        最近更新 更多