【问题标题】:SQL feeding an EXEC stored procedure another stored procedure with parameters with apostrophesSQL 为 EXEC 存储过程提供另一个带有撇号参数的存储过程
【发布时间】:2020-02-27 22:39:41
【问题描述】:

我正在按照本指南创建热图。

http://sqljason.com/2012/03/heat-maps-for-ssrs-using-map-control.html

其中一个步骤是将一个存储过程提供给另一个生成我的数据的存储过程。

我的看起来像这样:

exec dbo.CreateHeatMap 20, 25, 'exec ZZ_N_FinalEcomDashboardCustomerRFMUnPivot 03, 001, 1/1/2014, 1/1/2020'

问题在于这些日期。起初,我将它们包裹在像 '1/1/2014' 这样的撇号中,但这似乎打破了整条线。

我已经尝试了撇号、声明和设置变量、使用连接或加号以及其他所有方法的所有组合,但我似乎无法让它发挥作用。

我正在使用参数在 SSRS 报告中构建这一行。所以我的终极目标是这样的

exec dbo.CreateHeatMap 20, 25, 'exec ZZ_N_FinalEcomDashboardCustomerRFMUnPivot @Company, @Division, @Date, @date2' 

这些是我报告中的参数。我正在使用这条线在我的报告中创建一个数据集。

正确的语法是什么?

【问题讨论】:

  • 转义单引号的正确方法是将它们加倍 - 当你这样做时会发生什么?
  • 这似乎对 SQL 注入很危险。我想知道如果有人跑exec dbo.CreateHeatMap 20, 25, 'DROP PROC dbo.CreateHeatMap;';会发生什么
  • @DaleK 双引号也不起作用,因为我认为我正在输入像 '1/1/2014' 这样的字符串,而不是日期时间变量。但是您知道如何跳过所有引号并直接提供我当前的报告参数吗?

标签: sql sql-server exec sp-executesql


【解决方案1】:

大概是这样的:

exec dbo.CreateHeatMap 20, 25, 'exec ZZ_N_FinalEcomDashboardCustomerRFMUnPivot ''03'', ''001'', ''1/1/2014'', ''1/1/2020'''

如果强制保留前导零,则前导零“数字”也需要作为字符串引用

不禁认为这里存在更深层次的缺陷.. 但如果不查看 CreateHeatMap 代码,我无法确定。将 sql 传递给进程运行似乎是黑客灾难的秘诀

【讨论】:

  • 你知道我会如何使用 SSRS 参数吗?
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多