我一直在尝试创建一个存储过程,该存储过程使用动态 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 proc,所以我很确定它与 bcp 有关。
谢谢您的帮助