--取SQL 數據庫中的表的字段說明和表說明
--http://social.technet.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/2a90ca5d-85b8-4597-b72b-94762c2dcac7
--http://msdn.microsoft.com/zh-cn/library/ms180047.aspx
--表及字段描述信息處理示例
--創建表
USE [pratice]
GO
create table 表(a1 varchar(10),a2 char(2))
--為表添加描述信息
EXECUTE sp_addextendedproperty N'MS_Description', '人員信息表', N'user', N'dbo', N'table', N'表', NULL, NULL
--為字段a1添加描述信息
EXECUTE sp_addextendedproperty N'MS_Description', '姓名', N'user', N'dbo', N'table', N'表', N'column', N'a1'
--為字段a2添加描述信息
EXECUTE sp_addextendedproperty N'MS_Description', '性別', N'user', N'dbo', N'table', N'表', N'column', N'a2'
--更新表中列a1的描述屬性:
EXEC sp_updateextendedproperty 'MS_Description','字段1','user',dbo,'table','表','column',a1
--顯示表的描述屬性
--如果返回的表為空,可能對象沒有擴展屬性或用戶不具有列出對象擴展屬性的權限。當返回數據庫本身的擴展屬性時,objtype 和 objname 列將為 NULL
SELECT *
FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', '表', 'column', NULL)
--刪除表中列a1的描述屬性:
EXEC sp_dropextendedproperty 'MS_Description','user',dbo,'table','表','column',a1
--刪除測試
drop table 表
EXEC [sys].[sp_addextendedproperty] @name = 'MS_Description', -- sysname
@value ='測試表' , -- sql_variant
@level0type = 'schema', -- varchar(128)
@level0name = 'dbo', -- sysname
@level1type = 'table', -- varchar(128)
@level1name = 'test' -- sysname
-- @level2type = '', -- varchar(128)
-- @level2name = NULL -- sysname
SELECT * FROM [sys].[fn_listextendedproperty]()
--如果 property_name 的值為 NULL 或默認值,則 fn_listextendedproperty 將返回指定對象的所有屬性。
--
--如果指定了對象類型,並且對應的對象名的值為 NULL 或默認值,則 fn_listextendedproperty 將返回指定類型的所有對象的所有擴展屬性。
--
--對象是按級別區分的,級別 0 為最高,級別 2 為最低。如果指定了較低級別的對象(級別 1 或級別 2)的類型和名稱,則父對象類型和名稱應當為 NULL 或默認值以外的給定值。否則,此函數返回空結果集。
--A. 顯示數據庫的擴展屬性
--
--以下示例顯示為數據庫對象本身設置的所有擴展屬性。
USE [pratice];
GO
SELECT objtype, objname, name, value
FROM fn_listextendedproperty(default, default, default, default, default, default, default);
GO
--
--B. 顯示表中所有列的擴展屬性
--
--以下示例列出 ScrapReason 表中各列的擴展屬性。這包含在架構 Production 中。
USE [pratice];
GO
SELECT objtype, objname, name, value
FROM fn_listextendedproperty (NULL, 'schema', 'Production', 'table', 'test', 'column', default);
GO
--
--C. 顯示架構中所有表的擴展屬性
--
--以下示例列出了在 Sales 架構中所包含的所有表的擴展屬性。
USE [pratice];
GO
SELECT objtype, objname, name, value
FROM fn_listextendedproperty (NULL, 'schema', 'Sales', 'table', default, NULL, NULL);
GO
--為了指定擴展屬性,SQL Server 數據庫中的對象分為三個級別:0、1 和 2。 級別 0 是最高級別,定義為在數據庫作用域內包含的對象。 級別 1 的對象包含在架構作用域或用戶作用域中,而級別 2 的對象包含在級別 1 對象中。 可以為這些級別中任一級別的對象定義擴展屬性
--引用某個級別中的對象必須用擁有或包含它們的更高級別對象的名稱進行限制。 例如,當將擴展屬性添加到表列(級別 2)時,還必須指定包含該列的表名(級別 1)以及包含該表的架構(級別 0)。
--
--如果所有對象類型和名稱都為空,則屬性屬於當前數據庫本身。
--
--對於系統對象、用戶定義數據庫的作用域以外的對象或者未在 Arguments 中作為有效輸入列出的對象,不允許使用擴展屬性。
--
--A.將擴展屬性添加到數據庫中
--
--以下示例將值為 'AdventureWorks2012 Sample OLTP Database' 的屬性名稱 'Caption' 添加到 AdventureWorks2012 示例數據庫中。
USE AdventureWorks2012;
GO
--Add a caption to the AdventureWorks2012 Database object itself.
EXEC sp_addextendedproperty
@name = N'Caption',
@value = 'AdventureWorks2012 Sample OLTP Database';
--B.將擴展屬性添加到表中的列
--
--以下示例將標題屬性添加到 Address 表中的 PostalCode 列。
USE AdventureWorks2012;
GO
EXEC sp_addextendedproperty
@name = N'Caption',
@value = 'Postal code is a required column.',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address',
@level2type = N'Column', @level2name = 'PostalCode';
GO
--C.將輸入掩碼屬性添加到列中
--
--以下示例將輸入掩碼屬性 '99999 or 99999-9999 or #### ###' 添加到 Address 表中的 PostalCode 列。
USE AdventureWorks2012;
GO
EXEC sp_addextendedproperty
@name = N'Input Mask ', @value = '99999 or 99999-9999 or #### ###',
@level0type = N'Schema', @level0name = 'Person',
@level1type = N'Table', @level1name = 'Address',
@level2type = N'Column',@level2name = 'PostalCode';
GO
--D.將擴展屬性添加到文件組中
--
--下面的示例向 PRIMARY 文件組添加了一個擴展屬性。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Primary filegroup for the AdventureWorks2012 sample database.',
@level0type = N'FILEGROUP', @level0name = 'PRIMARY';
GO
--E.將擴展屬性添加到架構中
--
--下面的示例向 HumanResources 架構添加了一個擴展屬性。
USE AdventureWorks2012;
GO
EXECUTE sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Contains objects related to employees and departments.',
@level0type = N'SCHEMA',
@level0name = 'HumanResources';
--F.將擴展屬性添加到表中
--
--下面的示例將擴展屬性添加到 Person 架構中的 Address 表。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Street address information for customers, employees, and vendors.',
@level0type = N'SCHEMA', @level0name = 'Person',
@level1typ
--G.將擴展屬性添加到角色中
--
--下面的示例創建了一個應用程序角色並向該角色添加了一個擴展屬性。
USE AdventureWorks2012;
GO
CREATE APPLICATION ROLE Buyers
WITH Password = '987G^bv876sPY)Y5m23';
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Application Role for the Purchasing Department.',
@level0type = N'USER',
@level0name = 'Buyers';
--H.將擴展屬性添加到類型中
--
--下面的示例向類型添加了一個擴展屬性。
USE AdventureWorks2012;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Data type (alias) to use for any column that represents an order number. For example a sales order number or purchase order number.',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TYPE',
@level1name = N'OrderNumber';
--I.向用戶添加擴展屬性
--
--下面的示例創建了一個用戶並向該用戶添加了一個擴展屬性。
USE AdventureWorks2012;
GO
CREATE USER CustomApp WITHOUT LOGIN ;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'User for an application.',
@level0type = N'USER',
@level0name = N'CustomApp';