如何用sql语句查询出存储过程参数的默认值

如存储过程为
create procedure ptest
  @a char(6),
  @b int = 33 
as
begin
  ... ...
end
怎样能能够用sql语句查询到@b的默认值是33

作者: ggw128   发布时间: 2011-06-16

sys.parameters

作者: liangCK   发布时间: 2011-06-16

select name,default_value from sys.parameters where object_id = object_id('procname')

作者: aspwebchh   发布时间: 2011-06-16

引用 1 楼 liangck 的回复:
sys.parameters


可是..........


create procedure ptest
  @a char(6),
  @b int = 33  
as
begin
  select '' 
end


select default_value,* from sys.parameters where object_id=object_id('ptest')

default_value 查出为null,不知何故?

作者: ggw128   发布时间: 2011-06-16

引用 1 楼 liangck 的回复:

sys.parameters

SQL code

select name,parameter_id,max_length,default_value from sys.parameters
where object_id=(select id from sysobjects where name='ptest')
/*
name                 parameter_id max_length default_value
-------------------- ------------ ---------- ---------------
@a                   1            6          NULL
@b                   2            4          NULL
*/


这里显示的默认值是null

作者: maco_wang   发布时间: 2011-06-16

http://msdn.microsoft.com/zh-cn/library/ms176074%28v=SQL.100%29.aspx

官方说明:
has_default_value
SQL Server 只维护该目录视图中的 CLR 对象的默认值;因此,对于 Transact-SQL 对象,此列包含值 0。若要查看 Transact-SQL 对象中的参数的默认值,请查询 sys.sql_modules 目录视图的 definition 列,或使用 OBJECT_DEFINITION 系统函数。

default_value
sql_variant 如果 has_default_value 为 1,则此列的值为该参数的默认值;否则为 NULL。

具体使用:
SQL code

--第一种查看方式
select object_definition((select id from sysobjects where name='ptest'))

--第二种查看方式
select definition from sys.sql_modules
where object_id=(select id from sysobjects where name='ptest')

--第三种查看方式
select [text] from syscomments where id=
(select id from sysobjects where name='ptest')


作者: maco_wang   发布时间: 2011-06-16

楼上也没有根本上解决问题啊。

作者: ggw128   发布时间: 2011-06-16