工作中遇到的問題,為了維護別人做的項目,需要了解該陌生的項目數據庫,往往數據存儲表的命名比較亂無法通過表命名來猜測其表存在的意義,看起來比較的費勁,相對於程序代碼的注釋數據庫中的表是否也有注釋的地方呢?所以我從網上查了下關於表的注釋的問題,搜到了一些文章,其中一篇是利用表的擴展屬性,通過向表添加擴展屬性來進行注釋說明。
該方法主要是利用系統存儲過程sp_addextendedproperty來向表添加擴展屬性從而將注釋信息添加進去。
通過下文的測試,數據庫中的列字段、視圖、存儲過程、自定義函數均可以通過添加擴展屬性來添加注釋信息。
以下是示例代碼:
-------------------系統存儲過程sp_addextendedproperty代碼--------------------------
create procedure sys.sp_addextendedproperty
@name sysname,
@value sql_variant = NULL,
@level0type varchar(128) = NULL,
@level0name sysname = NULL,
@level1type varchar(128) = NULL,
@level1name sysname = NULL,
@level2type varchar(128) = NULL,
@level2name sysname = NULL
as
declare @ret int
if datalength(@value) > 7500
begin
raiserror(15097,-1,-1)
return 1
end
if @name is null
begin
raiserror(15600,-1,-1,'sp_addextendedproperty')
return (1)
end
execute @ret = sys.sp_validname @name
if (@ret <> 0)
begin
raiserror(15600,-1,-1,'sp_addextendedproperty')
return (1)
end
BEGIN TRANSACTION
begin
EXEC %%ExtendedPropertySet().AddValue(Name = @name, Value = @value, Level0type = @level0type, Level0name = @level0name, Level1type = @level1type, Level1name = @level1name, Level2type = @level2type, Level2name = @level2name)
IF @@error <> 0
begin
COMMIT TRANSACTION
return (1)
end
end
COMMIT TRANSACTION
return (0)
------------------------------------------------------------------------------------------
--注釋示例:
use Test
--利用擴展屬性為表添加注釋
exec sys.sp_addextendedproperty
@name = N'表注釋' --這里寫名稱
,@value =N'這是Test庫的一個數據存儲表.' --這里寫注釋內容
,@level0type = N'schema'
,@level0Name =N'dbo'
,@level1type = N'table'
,@level1name = N'TableName' --這里寫表名稱
--利用擴展屬性為視圖添加注釋
exec sys.sp_addextendedproperty
@name = N'視圖注釋'
,@value =N'這是視圖注釋的一個示例.'
,@level0type = N'schema'
,@level0Name =N'dbo'
,@level1type = N'view'
,@level1name = N'View_Show_ChineseLanguage'
--利用擴展屬性為存儲過程添加注釋
exec sys.sp_addextendedproperty
@name = N'存儲過程注釋'
,@value =N'這是存儲過程注釋的一個示例.'
,@level0type = N'schema'
,@level0Name =N'dbo'
,@level1type = N'procedure'
,@level1name = N'PRO_AnalyzeResult'
--利用擴展屬性為函數添加注釋
exec sys.sp_addextendedproperty
@name = N'函數注釋'
,@value =N'這是函數注釋的一個示例.'
,@level0type = N'schema'
,@level0Name =N'dbo'
,@level1type = N'function'
,@level1name = N'FUN_AnalyzeResult'
--查詢擴展屬性
(未完。。。)