Ошибка последовательности функций BCP при запуске proc с параметрами - PullRequest
2 голосов
/ 29 сентября 2010

Я пытался создать хранимую процедуру, которая использует динамический SQL для сборки команды bcp для экспорта данных из параметризованной хранимой процедуры в файл csv.

Изначально возникала проблема с доступом к файлу данных хоста, которая, по-моему, была разрешением файловой системы.

Теперь я постоянно получаю следующую ошибку при запуске процедуры:

SQLState = S1010, NativeError = 0 Ошибка = [Microsoft] [Собственный клиент SQL Server 10.0] Ошибка последовательности функций

Код процедуры выглядит следующим образом:

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 @, чтобы получить собранную команду для анализа.

Были включены имена параметров для процедуры вызова, поэтому команда вышла как:

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

Также сделал это без имен параметров с тем же сообщением об ошибке последовательности функций:

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

Любое понимание того, почему это не работает? Кстати, я запустил bcp через proc и скопировал его в командную строку с теми же результатами. Проблема в том, что я не могу найти в Интернете много информации об этой ошибке, возможно, потому, что она настолько общая.

Я могу успешно запустить процедуру InternalML.dbo.sp_SelectMarketingListMembers с параметрами непосредственно в окне запроса SSMS, поэтому я почти уверен, что это связано с bcp.

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

BCP выполнит следующее для разрешения формата набора результатов.Можете ли вы сказать нам результат этого:

set fmtonly on 
    exec sp_SelectMarketingListMembers <your input params>;
set fmtonly off
0 голосов
/ 05 декабря 2011

Как описано Натаном Скерлом, bcp установит опцию fmtonly и выполнит запрос, чтобы построить схему для вывода перед тем, как фактически выполнить запрос для генерации вывода.Я столкнулся с несколькими побочными эффектами:

  1. Условные выборки включены как часть схемы вывода, которую bcp попытается использовать, и поэтому вызывают ошибку при фактическом выполнении запроса, и
  2. Временные таблицы (#table) фактически не создаются, поэтому при обращении в запросе запуск fmtonly -ed завершится неудачей.
...