【问题标题】:How to call a stored procedure using an wildcard for the Integer parameter如何使用 Integer 参数的通配符调用存储过程
【发布时间】:2018-02-21 21:44:09
【问题描述】:

有一个公共存储过程接受客户 ID 并返回该客户的订单信息。客户 ID 作为单个整数参数。我希望能够运行它并为所有客户提取所有订单,但我无法修改存储过程。

是否有可以作为客户 ID 发送的通配符来欺骗存储过程以返回所有现有的客户订单?

提前致谢

【问题讨论】:

  • 这听起来像是 SQL 注入尝试。
  • 询问存储过程的作者——只有他知道是否有内置的“机制”忽略CustomerID并返回所有数据......
  • 没有。 sql 中只有字符数据类型有通配符。

标签: sql-server tsql reporting-services


【解决方案1】:

您可以为参数传递 NULL 并调整存储的过程以适当地处理它:

CREATE PROCEDURE GetCustomerOrders 
(
    @CustomerId int = NULL
) 
AS
BEGIN
    SELECT * FROM CustomerOrders 
    WHERE @CustomerId IS NULL OR CustomerId = @CustomerId
END

那么你可以这样做:

exec GetCustomerOrders

exec GetCustomerOrders @CustomerId

【讨论】:

  • 我忘了说。我无法修改存储过程。
  • 抱歉,没有通配符...在某种程度上这是使用存储过程的原因之一,因此人们不会向数据库发送任意查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
相关资源
最近更新 更多