删除列上的扩展属性 以下示例从架构 dbo 内包含的表 T1 中的列 id 上删除属性 caption。 CREATE TABLE T1 (id int , name char (20)); GO EXEC sp_addextendedproperty @name = 'caption' ,@value = 'Employee ID' ,@level0type = 'schema' ,@level0name = dbo ,@level1type = 'table' ,@level1name = 'T1' ,@level2type = 'column' ,@level2name = id; GO EXEC sp_dropextendedproperty @name = 'caption' ,@level0type = 'schema' ,@level0name = dbo ,@level1type = 'table' ,@level1name = 'T1' ,@level2type = 'column' ,@level2name = id; GO DROP TABLE T1; GO 将扩展属性添加到表中的列 以下示例将标题属性添加到 Address 表中的 PostalCode 列。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
你提供的东西貌似有点问题,不过我估计你问的大概是这个意思。create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001' , null , '广东省') insert into tb values('002' , '001' , '广州市') insert into tb values('003' , '001' , '深圳市') insert into tb values('004' , '002' , '天河区') insert into tb values('005' , '003' , '罗湖区') insert into tb values('006' , '003' , '福田区') insert into tb values('007' , '003' , '宝安区') insert into tb values('008' , '007' , '西乡镇') insert into tb values('009' , '007' , '龙华镇') insert into tb values('010' , '007' , '松岗镇') go--方法一 select m.* , isnull((select name from tb n where n.id = m.pid),'无上级') ParentName from tb m /* id pid name ParentName ---- ---- ---------- ---------- 001 NULL 广东省 无上级 002 001 广州市 广东省 003 001 深圳市 广东省 004 002 天河区 广州市 005 003 罗湖区 深圳市 006 003 福田区 深圳市 007 003 宝安区 深圳市 008 007 西乡镇 宝安区 009 007 龙华镇 宝安区 010 007 松岗镇 宝安区(所影响的行数为 10 行) */--方法二 select m.* , isnull(n.name ,'无上级') ParentName from tb m left join tb n on m.pid = n.id /* id pid name ParentName ---- ---- ---------- ---------- 001 NULL 广东省 无上级 002 001 广州市 广东省 003 001 深圳市 广东省 004 002 天河区 广州市 005 003 罗湖区 深圳市 006 003 福田区 深圳市 007 003 宝安区 深圳市 008 007 西乡镇 宝安区 009 007 龙华镇 宝安区 010 007 松岗镇 宝安区(所影响的行数为 10 行) */ drop table tb
Select o.name AS tableName, c.name AS columnName, p.[value] AS Description FROM sysproperties p INNER JOIN sysobjects o ON o.id = p.id INNER JOIN syscolumns c ON p.id = c.id AND p.smallid = c.colid Where (p.name = 'MS_Description') AND (c.name = 'province') AND (o.name = 'ip_address') orDER BY o.name
接上,sql2005中稍有不同: Select o.name AS tableName, c.name AS columnName, p.[value] AS Description FROM sys.extended_properties p INNER JOIN sysobjects o ON o.id = p.major_id INNER JOIN syscolumns c ON p.major_id = c.id AND p.minor_id = c.colid Where (p.name = 'MS_Description') AND (c.name = 'province') AND (o.name = 'ip_address') orDER BY o.name
--以下可以把所有列的说明全部改过来 declare @schemaname varchar(100),@tablename varchar(100),@columnname varchar(100) declare @oldvalue varchar(100),@newvalue varchar(100)declare curcol cursor for select c.[name],b.[name],d.[name],cast(a.value as varchar(100)) from sys.extended_properties a join sys.objects b on a.major_id = b.object_id join sys.schemas c on b.schema_id = c.schema_id join sys.columns d on a.major_id = d.object_id and a.minor_id = d.column_id where a.[name] = 'MS_Description' and cast(a.[value] as varchar(8000)) like '%产品%' and a.class = 1 and minor_id <> 0 open curcol fetch next from curcol into @schemaname,@tablename,@columnname,@oldvalue while @@fetch_status = 0 begin set @newvalue = replace(@oldvalue,'产品','商品') exec sp_updateextendedproperty 'MS_Description', @newvalue, 'SCHEMA', @schemaname, 'TABLE', @tablename, 'COLUMN', @columnname fetch next from curcol into @schemaname,@tablename,@columnname,@oldvalue end close curcol deallocate curcol
以下示例从架构 dbo 内包含的表 T1 中的列 id 上删除属性 caption。
CREATE TABLE T1 (id int , name char (20));
GO
EXEC sp_addextendedproperty
@name = 'caption'
,@value = 'Employee ID'
,@level0type = 'schema'
,@level0name = dbo
,@level1type = 'table'
,@level1name = 'T1'
,@level2type = 'column'
,@level2name = id;
GO
EXEC sp_dropextendedproperty
@name = 'caption'
,@level0type = 'schema'
,@level0name = dbo
,@level1type = 'table'
,@level1name = 'T1'
,@level2type = 'column'
,@level2name = id;
GO
DROP TABLE T1;
GO
将扩展属性添加到表中的列
以下示例将标题属性添加到 Address 表中的 PostalCode 列。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
你提供的东西貌似有点问题,不过我估计你问的大概是这个意思。create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
insert into tb values('001' , null , '广东省')
insert into tb values('002' , '001' , '广州市')
insert into tb values('003' , '001' , '深圳市')
insert into tb values('004' , '002' , '天河区')
insert into tb values('005' , '003' , '罗湖区')
insert into tb values('006' , '003' , '福田区')
insert into tb values('007' , '003' , '宝安区')
insert into tb values('008' , '007' , '西乡镇')
insert into tb values('009' , '007' , '龙华镇')
insert into tb values('010' , '007' , '松岗镇')
go--方法一
select m.* , isnull((select name from tb n where n.id = m.pid),'无上级') ParentName from tb m
/*
id pid name ParentName
---- ---- ---------- ----------
001 NULL 广东省 无上级
002 001 广州市 广东省
003 001 深圳市 广东省
004 002 天河区 广州市
005 003 罗湖区 深圳市
006 003 福田区 深圳市
007 003 宝安区 深圳市
008 007 西乡镇 宝安区
009 007 龙华镇 宝安区
010 007 松岗镇 宝安区(所影响的行数为 10 行)
*/--方法二
select m.* , isnull(n.name ,'无上级') ParentName from tb m left join tb n on m.pid = n.id
/*
id pid name ParentName
---- ---- ---------- ----------
001 NULL 广东省 无上级
002 001 广州市 广东省
003 001 深圳市 广东省
004 002 天河区 广州市
005 003 罗湖区 深圳市
006 003 福田区 深圳市
007 003 宝安区 深圳市
008 007 西乡镇 宝安区
009 007 龙华镇 宝安区
010 007 松岗镇 宝安区(所影响的行数为 10 行)
*/
drop table tb
FROM sysproperties p INNER JOIN
sysobjects o ON o.id = p.id INNER JOIN
syscolumns c ON p.id = c.id AND p.smallid = c.colid
Where (p.name = 'MS_Description') AND (c.name = 'province') AND (o.name = 'ip_address')
orDER BY o.name
选取表ip_address中 字段province的描述
--创建表及描述信息
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
--删除表中列a1的描述属性:
EXEC sp_dropextendedproperty 'MS_Description','user',dbo,'table','表','column',a1
--删除测试
drop table 表
FROM sys.extended_properties p INNER JOIN
sysobjects o ON o.id = p.major_id INNER JOIN
syscolumns c ON p.major_id = c.id AND p.minor_id = c.colid
Where (p.name = 'MS_Description') AND (c.name = 'province') AND (o.name = 'ip_address')
orDER BY o.name
--以下可以把所有列的说明全部改过来
declare @schemaname varchar(100),@tablename varchar(100),@columnname varchar(100)
declare @oldvalue varchar(100),@newvalue varchar(100)declare curcol cursor for
select c.[name],b.[name],d.[name],cast(a.value as varchar(100))
from sys.extended_properties a
join sys.objects b on a.major_id = b.object_id
join sys.schemas c on b.schema_id = c.schema_id
join sys.columns d on a.major_id = d.object_id and a.minor_id = d.column_id
where a.[name] = 'MS_Description' and cast(a.[value] as varchar(8000)) like '%产品%' and a.class = 1 and minor_id <> 0
open curcol
fetch next from curcol into @schemaname,@tablename,@columnname,@oldvalue
while @@fetch_status = 0
begin
set @newvalue = replace(@oldvalue,'产品','商品')
exec sp_updateextendedproperty 'MS_Description', @newvalue, 'SCHEMA', @schemaname, 'TABLE', @tablename, 'COLUMN', @columnname fetch next from curcol into @schemaname,@tablename,@columnname,@oldvalue
end
close curcol
deallocate curcol