Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取存储过程本身内部的参数列表_Sql_Sql Server_Stored Procedures_Parameters - Fatal编程技术网

Sql 如何获取存储过程本身内部的参数列表

Sql 如何获取存储过程本身内部的参数列表,sql,sql-server,stored-procedures,parameters,Sql,Sql Server,Stored Procedures,Parameters,我知道出去很容易,比如: select * from sys.parameters where object_id in (select object_id from sys.procedures where name = 'YourSProc') 但是,如果我有一个SP,它有一个带有默认值的可选参数,那么如果param value==param default value,我怎么知道是否实际设置了一个参数 像 在存储过程本身中,如何知道用户是否调用了 exec sp1 @use

我知道出去很容易,比如:

select * from sys.parameters
where object_id in 
      (select object_id from sys.procedures where name = 'YourSProc')
但是,如果我有一个SP,它有一个带有默认值的可选参数,那么如果param value==param default value,我怎么知道是否实际设置了一个参数

在存储过程本身中,如何知道用户是否调用了

exec sp1 @userid=1, @passwd=null


是否有像@paramlist这样的全局变量可以提供参数列表?

不完全是您要寻找的,但是如果您没有将默认值设置为null,而是将默认值设置为一些不太可能的秘密哨兵值-可能是一个GUID,该怎么办。然后,您将在SP中检查该参数是否设置为GUID,这意味着该参数为默认值,或者设置为其他任何值,在这种情况下,用户提供了该参数。

您不容易(如果有的话)。为什么需要这样做?@JeffO,我在使用MSSQL。@MartinSmith,如果我将可选参数的默认值设置为null,那么我会添加一些逻辑来检查它是否为null,如果不是,我将避免一些更新工作。但是如果我这样做的话,当可选参数作为null传入时,我无法处理。所以你的意思是像
updatefooset Bar=@Bar,Baz=@Baz
其中列
Bar
Baz
都可能被更新为
NULL
,如果两者都没有被传入,您只需跳过该更新,因为没有被传入将表示“保持不变”而不是“设置为NULL”?如果是这样,我想不出一个好办法。就像你说的,可能还有额外的参数。我将尝试提供额外的参数。对于某些字段,这可能很好。我如何为一个可为空的布尔设置一个秘密的哨兵值?这就是我的方法的弱点。老实说,我更喜欢@Martin Smith的建议。谢谢你们。我认为@MartinSmith的解决方案对我有好处。
exec sp1 @userid=1, @passwd=null
exec sp2 @userid=2