(轉)如何利用SQL創建與修改列的說明信息(備注信息)詳解


相信很多朋友對利用SQL創建表已經很熟悉了,但我們發現在創建表的同時不能像添加默認值或者主鍵一樣為列加上說明信息,所以我們經常是創建表后再到表的可視化設計器中為列加上說明,這樣操作起來就相當麻煩了,本篇我們主要討論如何利用SQL在創建表時為列加上說明信息

我們先創建一個測試表:

if exists(select 1 from sys.tables where object_id=object_id('test'))
begin
drop table test
end
create table test
(
col1 varchar(50),
col2 varchar(50)
)


這個我們已經很熟悉了,那么怎么為列col1及col2加上說明信息呢?
這就要用到系統存儲過程sp_addextendedproperty
在添加之前我們先看一下sp_addextendedproperty的語法:

sp_addextendedproperty
    [ @name = ] { 'property_name' }
    [ , [ @value = ] { 'value' } 
        [ , [ @level0type = ] { 'level0_object_type' } 
                    , [ @level0name = ] { 'level0_object_name' } 
                [ , [ @level1type = ] { 'level1_object_type' } 
                                    , [ @level1name = ] { 'level1_object_name' } 
                        [ , [ @level2type = ] { 'level2_object_type' } 
                                                    , [ @level2name = ] { 'level2_object_name' } 
                        ] 
                ]
        ] 
    ] 


該存儲過程一共有8個參數,估計初學者一看就暈了,不要着急,我們可以通過實例來理解,下面我們先利用sp_addextendedproperty為col1列加上說明:

execute sp_addextendedproperty N'MS_Description',N'這是測試列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'


上面就是為列col1加上說明的SQL命令,來理解一下:
雖然sp_addextendedproperty有8個參數,但我們可以把這個8個參數理解為4對,其實看參數名我們也可以猜出大概了:
@name與@value為一對
@level0type與@level0name為一對
@level1type與@level1name為一對
@level2type與@level2name為一對

那么這4對參數分別代表什么呢?
1,@name與@value
@name:指定我們是要為列添加什么信息,比如我們要為列添加擴展信息,那么@name就等於'Caption',本篇是要為列添加說明信息,所以@name等於'MS_Description'
@value:指定與@name關聯的值,本篇也就是列的具體說明。

2,@level0type與@level0name
@level0type:指定我們要修改的列的表所於那個數據庫架構,所以它等於'SCHEMA',有些網上教程中會說它也可以等於'user',但在sql server的未來版本中,將刪除'user',所以推薦大家用'SCHEMA'
@level0name:指定我們要修改的表所在架構的名稱

3,@level1type與@level1name
@level1type:指明我們要修改的列所屬對象是表,還是視圖等。本篇是修改表中的列,所以為'table',
@@level1name: 指明要修改的列所屬表的名稱

4,@level2type與@level2name
@level2type:指明我們要修改的對象是列,還是主鍵,還是約束等。本篇修改的是列,所以為'column'
@level2name:指明要修改列的列名

到此,我們應該了解sp_addextendedproperty中各參數的意思了,完整的SQL命令如下:

if exists(select 1 from sys.tables where object_id=object_id('test'))
begin
drop table test
end
create table test
(
col1 varchar(50),
col2 varchar(50)
)

execute sp_addextendedproperty N'MS_Description',N'這是測試列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

execute sp_addextendedproperty N'MS_Description',N'這是測試列2',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col2'


執行命令后通過如下查詢語句來驗證我們的結果:

select B.Name,A.value from sys.extended_properties A 
inner join sys.columns B on A.major_id=B.object_id 
and A.minor_id=B.column_id
where A.major_id=object_id('test')


關於如何利用SQL語句查詢指定表的列說明信息,請參看本站:
利用SQL語句查詢出指定表的所有擴展屬性(列說明)

執行,返回的結果如下:
Name  value
col1  這是測試列1
col2  這是測試列2

創建表時同時為表中的列添加說明信息我們已經完成了,那么,我們要如何利用SQL來修改列的說明信息呢?利用系統存儲過程sp_updateextendedproperty,它的用法和sp_addextendedproperty一樣,就不多加說明了,修改示例如下:

execute sp_updateextendedproperty N'MS_Description',N'這是修改后的測試列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

execute sp_updateextendedproperty N'MS_Description',N'這是修改后的測試列2',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col2'


同樣利用上面的SQL語句查詢修改后的結果:
Name  value
col1  這是修改后的測試列1
col2  這是修改后的測試列2

本篇到此結束,希望本篇能給大家帶來一些幫助。

來源:.net學習網
說明:所有來源為 .net學習網 的文章均為原創,如有轉載,請在轉載處標注本頁地址,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM