首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sp_executesql在动态sql中向BCP发送参数

问如何使用sp_executesql在动态sql中向BCP发送参数
EN

Database Administration用户
提问于 2019-02-20 11:26:14
回答 1查看 2.4K关注 0票数 2

我们正在尝试动态运行BCP查询,以便将一些数据放到文件中。但是,在使用下面的代码时,sp_executesql似乎并不理解BCP查询中的@RId是一个参数。是否有任何方法将该参数值一路发送进来?运行此操作时,错误消息是: error =微软SQL Server必须声明标量变量"@RId“。

查询:

代码语言:javascript
复制
DECLARE @REPORTID Nvarchar(500) = 'SomeID_Resend2019-02-20 11:38:24.040';
DECLARE @Path varchar(500) = '\\server\folder\_FileName.csv';

DECLARE @SQL nvarchar(500);

SET @SQL
    = N'master.dbo.xp_cmdshell ''BCP "SELECT RowValues FROM ServerName.dbo.TableName WHERE ReportId = @RId" queryout @Path -t, -T -N -S SERVERNAME\INSTANCENAME''';

EXEC sp_executesql @SQL,
                   N'@RId nVARCHAR(500), @Path VARCHAR(500)',
                   @REPORTID,
                   @Path;
EN

回答 1

Database Administration用户

发布于 2019-02-20 11:57:42

我认为在生成动态SQL时,必须将这些参数具体化。类似于:

代码语言:javascript
复制
DECLARE @REPORTID Nvarchar(500) = 'SomeID_Resend2019-02-20 11:38:24.040';
DECLARE @Path varchar(500) = '\\server\folder\_FileName.csv';

DECLARE @SQL nvarchar(500);

SET @SQL
    = N'master.dbo.xp_cmdshell ''BCP "SELECT RowValues FROM ServerName.dbo.TableName WHERE ReportId = ''''' + @REPORTID + '" queryout ' + @Path + ' -t, -T -N -S SERVERNAME\INSTANCENAME''';
PRINT @SQL
--EXEC sp_executesql @SQL

PRINT语句显示生成的动态SQL。

代码语言:javascript
复制
master.dbo.xp_cmdshell 'BCP "SELECT RowValues FROM ServerName.dbo.TableName WHERE ReportId = ''SomeID_Resend2019-02-20 11:38:24.040" queryout \\server\folder\_FileName.csv -t, -T -N -S SERVERNAME\INSTANCENAME'
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/230251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档