【问题标题】:BCP Function sequence error when running proc with parameters使用参数运行 proc 时 BCP 函数序列错误
【发布时间】:2011-04-18 23:13:14
【问题描述】:

我一直在尝试创建一个存储过程,该存储过程使用动态 SQL 组装 bcp 命令以将数据从参数化存储过程导出到 csv 文件。

最初遇到了我认为是文件系统权限的主机数据文件访问问题。

现在我在运行 proc 时始终收到填充错误:

SQLState = S1010,NativeError = 0 错误 = [Microsoft][SQL Server Native Client 10.0]函数序列错误

proc代码如下:

ALTER PROCEDURE [dbo].[sp_MakeMarketingListExports] 
        @includeInService varchar(1) = NULL,
        @includeMLM varchar(1) = NULL,
        @includeQuoteNoodle varchar(1) = NULL,
        @netective varchar(1) = NULL,
        @cyberChex varchar(1) = NULL,
        @agentsAdvantage varchar(1) = NULL,
        @quoteNoodle varchar(1) = NULL,
        @mlmListSubscriber varchar(1) = NULL,
        @state varchar(10) = NULL,
        @mailerID varchar(10) = NULL,
        @filePath varchar(250)
AS
BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        DECLARE @command varchar(500);

        SET @command = 'bcp "exec InternalML..sp_SelectMarketingListMembers '
                                + '@includeInService = ' + COALESCE(@includeInService, 'NULL') + ', '
                                + '@includeMLM = ' + COALESCE(@includeMLM, 'NULL') + ', '
                                + '@includeQuoteNoodle = ' + COALESCE(@includeQuoteNoodle, 'NULL') + ', '
                                + '@netective = ' + COALESCE(@netective, 'NULL') + ', '
                                + '@cyberChex = ' + COALESCE(@cyberChex, 'NULL') + ', '
                                + '@agentsAdvantage = ' + COALESCE(@agentsAdvantage, 'NULL') + ', '
                                + '@quoteNoodle = ' + COALESCE(@quoteNoodle, 'NULL') + ', '
                                + '@mlmListSubscriber = ' + COALESCE(@mlmListSubscriber, 'NULL') + ', '
                                + '@state = ' + COALESCE(@state, 'NULL') + '"'
                                + ' queryout ' + COALESCE(@filePath, 'NULL')
                                + ' -c -T -S ' + @@servername

        SELECT @command;

        EXEC xp_cmdshell @command;
END

我使用 SELECT @command 来获取组装命令进行分析。

已包含 calle proc 的参数名称,因此命令如下:

bcp "exec InternalML..sp_SelectMarketingListMembers @includeInService = NULL, @includeMLM = NULL, @includeQuoteNoodle = NULL, @netective = NULL, @cyberChex = NULL, @agentsAdvantage = NULL, @quoteNoodle = NULL, @mlmListSubscriber = NULL, @state = NULL" queryout C:\temp\test.csv -c -T -S SPKD18

在没有参数名的情况下也做了同样的Function sequnc错误信息:

bcp "exec InternalML.dbo.sp_SelectMarketingListMembers NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @state = NULL" queryout "C:\\temp\test.csv" -c -T -S SPKD18

关于为什么这不起作用的任何见解?顺便说一句,我已经通过 proc 运行 bcp 并将其复制到具有相同结果的命令提示符下。问题是我在互联网上找不到太多关于这个错误的信息,可能是因为它太笼统了。

我可以直接在 SSMS 查询窗口中使用参数成功运行 InternalML.dbo.sp_SelectMarketingListMembers 过程,所以我很确定它与 bcp 有关。

感谢您的帮助

【问题讨论】:

    标签: sql-server-2005 bcp


    【解决方案1】:

    BCP 将执行以下操作来解析结果集的格式。你能告诉我们这个结果吗:

    set fmtonly on 
        exec sp_SelectMarketingListMembers <your input params>;
    set fmtonly off
    

    【讨论】:

    • sorry,刚刚注意到这个帖子的数据。
    • 这让我的查询成功运行
    【解决方案2】:

    如 Nathan Skerl 所述,bcp 将设置 fmtonly 选项并运行查询,以便在实际运行查询以生成输出之前为输出构建架构。我遇到了一些副作用:

    1. 条件选择包含在 bcp 将尝试使用的输出架构中,因此在实际运行查询时会导致错误,并且
    2. 临时表 (#table) 并未实际创建,因此在查询中引用时会导致 fmtonly-ed 运行失败。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多