SQL Server:带有默认值的sp_help

时间:2010-04-01 20:59:51

标签: sql-server sql-server-2008 metadata

是否有sp_help的替代方法,其中包含参数的默认值?

3 个答案:

答案 0 :(得分:1)

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

  

SQL Server仅维护默认值   此目录中CLR对象的值   视图;因此,本专栏将   总是有一个0的值   Transact-SQL对象。要查看   a中参数的默认值   Transact-SQL对象,查询   定义列   sys.sql_modules目录视图,或使用   OBJECT_DEFINITION系统功能。

因此,检索存储过程参数的默认值的唯一方法是解析对象定义。

答案 1 :(得分:1)

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

我希望在将来的版本中解决这个问题 - 这是元数据中的一个重要差距,并且没有真正的理由不应该提供它。

另一种可能性是定期解析proc并使用扩展属性自己标记参数 - 扩展属性更容易查询,您可以使用它们自我记录数据库:

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

答案 2 :(得分:0)

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