SQL Server Management Studio "execute stored procedure" 或 "script stored procedure" 中未显示的带有可选参数的存储过程

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 (SSMS) 中,您可以使用 GUI 执行存储过程以获得帮助。这可以通过右键单击对象资源管理器中的存储过程并选择 "Execute Stored Procedure" 或 "Script Stored Procedure as > CREATE to > New Query Editor Window".

来完成。

这两者都会导致预构建的 SQL 查询来执行 SP,并且它们都包含来自 SP 的可选参数。有没有办法让它的可选参数是 "hidden"?

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

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

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

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

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