【发布时间】:2017-01-26 21:05:41
【问题描述】:
有这样的简单存储过程:
CREATE PROCEDURE [dbo].[ProcedureName]
@p1IntMandatory INT ,
@p2IntDefValueZero INT = 0 ,
@p3VarcharWzValue VARCHAR(MAX) = 'abc' ,
@p4DateTimeNullable DATETIME = NULL ,
@p5IntOutWzValueZero INT = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON;
END;
在运行此语句获取存储过程参数元数据特别是“has_default_value”、“default_value”和“is_nullable”列时,我发现它们的值无效。
SELECT *
FROM sys.parameters
WHERE object_id = OBJECT_ID('[dbo].[ProcedureName]');
这是结果:
name has_default_value default_value is_nullable
@p1IntMandatory 0 NULL 1
@p2IntDefValueZero 0 NULL 1
@p3VarcharWzValue 0 NULL 1
@p4DateTimeNullable 0 NULL 1
@p5IntOutWzValueZero 0 NULL 1
是否有正确的方法来获取有关存储过程的有效元数据,特别是这 3 列?
【问题讨论】:
-
documentation中:SQL Server只维护这个目录视图中CLR对象的默认值;因此,对于 Transact-SQL 对象,此列的值为 0。要查看 Transact-SQL 对象中参数的默认值,请查询 sys.sql_modules 目录视图的定义列,或使用 OBJECT_DEFINITION 系统函数。
-
必须从 sys.sql_modules 或类似的东西中解析定义
-
解决方案:需要将存储过程读取为纯文本并手动解析。
标签: sql-server tsql stored-procedures