2010-04-01 126 views

回答

1

我的确希望默认值在sys.all_parameters中可用,实际上该视图的列号为default_value。但不幸的是,它不用于T-SQL存储过程。 MSDN说:

SQL Server只保留默认本目录 观点CLR对象 值;因此,对于 Transact-SQL对象,此列 的值始终为0。要查看 Transact-SQL对象中参数的 默认值,请查询 sys.sql_modules目录视图的 定义列或使用OBJECT_DEFINITION系统函数的 。

因此,它似乎获取存储过程参数的默认值的唯一方法是解析对象定义。

0

我相信唯一的内置方法是使用sp_helptext来查看整个过程文本。

1

This article可能很有用,它实际上提供了示例代码来解析例程定义以确定默认参数。

我预计这将在未来版本中解决 - 这是元数据中的重大差距,并且没有真正的理由不应该提供。

另一种可能性是定期解析特效和标记,扩展属性自己的参数 - 扩展属性是更容易对查询,你可以用它们来自动文档数据库:

USE [SandBox] 
GO 

/****** Object: StoredProcedure [dbo].[usp_Test] Script Date: 04/01/2010 20:23:11 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[usp_Test] 
@input INT = 0 
AS BEGIN 
SELECT @input AS [output] 
END 
GO 

EXEC sys.sp_addextendedproperty @name=N'TestXP', @value=N'testing' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'PROCEDURE',@level1name=N'usp_Test', @level2type=N'PARAMETER',@level2name=N'@input' 
GO