2010-04-01 133 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