select name,default_value from sys.parameters where object_id = object_id('procname')
可是.......... 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,不知何故?
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
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。具体使用:--第一种查看方式 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')
create procedure ptest @a char(6), @b int = 33 as begin print 3 end go ;with cte as( select object_definition((select id from sysobjects where name='ptest')) as s ),c2 as( select ltrim(substring(s,charindex('=',s,charindex('@b',s))+1,charindex('as',s,charindex('@b',s))-charindex('=',s,charindex('@b',s))+1))s from cte )select left(s,charindex(' ',s)-1) from c2 /* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 33(1 行受影响) */ go drop procedure ptest
可是..........
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,不知何故?
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
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。具体使用:--第一种查看方式
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')
@a char(6),
@b int = 33
as
begin
print 3
end
go
;with cte as(
select object_definition((select id from sysobjects where name='ptest')) as s
),c2 as(
select ltrim(substring(s,charindex('=',s,charindex('@b',s))+1,charindex('as',s,charindex('@b',s))-charindex('=',s,charindex('@b',s))+1))s from cte
)select left(s,charindex(' ',s)-1) from c2
/*
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
33(1 行受影响)
*/
go
drop procedure ptest