Я пытался создать хранимую процедуру, которая использует динамический 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.
Спасибо за помощь