【问题标题】:Stored procedure with optional parameter that doesn't show in SQL Server Management Studio "execute stored procedure" or "script stored procedure"SQL Server Management Studio“执行存储过程”或“脚本存储过程”中未显示的带有可选参数的存储过程
【发布时间】:2018-01-16 03:01:39
【问题描述】:

在 SQL Server Management Studio (SSMS) 中,您可以使用 GUI 执行存储过程以获得帮助。这可以通过右键单击对象资源管理器中的存储过程并选择“执行存储过程”或“将存储过程编写为 > 创建到 > 新查询编辑器窗口”来完成。

这两种方法都会导致执行 SP 的预构建 SQL 查询,并且它们都包含来自 SP 的可选参数。有没有办法让可选参数“隐藏”?

我有一些用户支持人员使用 SSMS 来运行某些 SP,我不希望他们为某些可选参数提供值。如果需要,当我运行 SP 时,我希望能够自己提供它们,而不是用户支持人员。

我已经标记了 SQL Server 2014 和 2008 R2,以防我可以在 SP 本身中设置一些选项。

【问题讨论】:

  • 一种方法是用另一种方法包装过程并限制对某些参数的访问。然后在这个过程中调用你原来的那个。
  • 谢谢,我想到了。

标签: sql-server sql-server-2008-r2 ssms sql-server-2014 ssms-2014


【解决方案1】:

你可以用另一个包装你的存储过程:

CREATE PROCEDURE dbo.my_orig_proc
    @id INT
   ,@some_param_default INT = 10

AS
BEGIN
...
END

包装器:

CREATE PROCEDURE dbo.my_wrapper_proc
   @id INT
 AS
 BEGIN
     EXEC dbo.my_orig_proc @id;
 END

如有必要,我还会限制对原始程序的访问。


另一种方法是添加检查并且不允许特定用户覆盖值:

CREATE PROCEDRUE dbo.my_orig_proc
   @id INT,
   ,@some_param_default INT = 10
AS
BEGIN
   IF USER_NAME() = 'user_name' AND @some_param_default <> 10
      RAISERROR('You cannot change @some_param_default value' ,16,1);
END

缺点:你需要在两个地方更改参数值,如果用户有模拟权限,他仍然可以执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多