我们正在尝试动态运行BCP查询,以便将一些数据放到文件中。但是,在使用下面的代码时,sp_executesql似乎并不理解BCP查询中的@RId是一个参数。是否有任何方法将该参数值一路发送进来?运行此操作时,错误消息是: error =微软SQL Server必须声明标量变量"@RId“。
查询:
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;发布于 2019-02-20 11:57:42
我认为在生成动态SQL时,必须将这些参数具体化。类似于:
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 @SQLPRINT语句显示生成的动态SQL。
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'https://dba.stackexchange.com/questions/230251
复制相似问题