2011-02-04 28 views

Trả lời

8

Đối với tôi, tập lệnh trong liên kết của Mikael không tạo ra các giọt cho tất cả các thuộc tính mở rộng, ví dụ: cho các lượt xem. Những gì đã làm việc là một kịch bản mà Jamie Thomson đã tạo ra, mà bạn có thể tải về từ article này.

Tôi đã dán kịch bản của mình ở đây (đầy đủ với sự thừa nhận, trong trường hợp bài viết được lấy ra):

/* 
This script will generate calls to sp_dropextendedproperty for every 
extended property that exists in your database. 
Actually, a caveat: I don't promise that it will catch each and every 
extended property that exists, but I'm confident it will catch most of them! 

It is based on this: 
http://blog.hongens.nl/2010/02/25/drop-all-extended-properties-in-a-mssql-database/ 
by Angelo Hongens. 

Also had lots of help from this: 
http://www.sqlservercentral.com/articles/Metadata/72609/ 
by Adam Aspin 

Adam actually provides a script at that link to do something very similar 
but when I ran it I got an error: 
Msg 468, Level 16, State 9, Line 78 
Cannot resolve the collation conflict between "Latin1_General_100_CS_AS" and "Latin1_General_CI_AS" in the equal to operation. 

So I put together this version instead. 

Use at your own risk. 

Jamie Thomson 
2012-03-25 
*/ 


/*Are there any extended properties? Let's take a look*/ 
select *,OBJECT_NAME(major_id) from sys.extended_properties xp 

/*Now let's generate sp_dropextendedproperty statements for all of them.*/ 
--tables 
set nocount on; 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.tables t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--columns 
select 'EXEC sp_dropextendedproperty 
@name = '''+sys.extended_properties.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(extended_properties.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(extended_properties.major_id) + ''' 
,@level2type = ''column'' 
,@level2name = ''' + columns.name + '''' 
from sys.extended_properties 
join sys.columns 
on columns.object_id = extended_properties.major_id 
and columns.column_id = extended_properties.minor_id 
where extended_properties.class_desc = 'OBJECT_OR_COLUMN' 
and extended_properties.minor_id > 0 
union 
--check constraints 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.check_constraints cc  on xp.major_id = cc.object_id 
union 
--check constraints 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.default_constraints cc  on xp.major_id = cc.object_id 
union 
--views 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''view'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.views t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--sprocs 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''procedure'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.procedures t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--FKs 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.foreign_keys cc  on xp.major_id = cc.object_id 
union 
--PKs 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''TABLE'', @level1name = [' + TBL.name + '] , @level2type = ''CONSTRAINT'', @level2name = [' + SKC.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.tables TBL 
INNER JOIN sys.schemas SCH 
ON TBL.schema_id = SCH.schema_id 
INNER JOIN sys.extended_properties SEP 
INNER JOIN sys.key_constraints SKC 
ON SEP.major_id = SKC.object_id 
ON TBL.object_id = SKC.parent_object_id 
WHERE SKC.type_desc = N'PRIMARY_KEY_CONSTRAINT' 
union 
--Table triggers 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''TABLE'', @level1name = [' + TBL.name + '] , @level2type = ''TRIGGER'', @level2name = [' + TRG.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.tables TBL 
INNER JOIN sys.triggers TRG 
ON TBL.object_id = TRG.parent_id 
INNER JOIN sys.extended_properties SEP 
ON TRG.object_id = SEP.major_id 
INNER JOIN sys.schemas SCH 
ON TBL.schema_id = SCH.schema_id 
union 
--UDF params 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''FUNCTION'', @level1name = [' + OBJ.name + '] , @level2type = ''PARAMETER'', @level2name = [' + PRM.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.objects OBJ 
ON SEP.major_id = OBJ.object_id 
INNER JOIN sys.schemas SCH 
ON OBJ.schema_id = SCH.schema_id 
INNER JOIN sys.parameters PRM 
ON SEP.major_id = PRM.object_id 
AND SEP.minor_id = PRM.parameter_id 
WHERE SEP.class_desc = N'PARAMETER' 
AND OBJ.type IN ('FN', 'IF', 'TF') 
union 
--sp params 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''PROCEDURE'', @level1name = [' + SPR.name + '] , @level2type = ''PARAMETER'', @level2name = [' + PRM.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.procedures SPR 
ON SEP.major_id = SPR.object_id 
INNER JOIN sys.schemas SCH 
ON SPR.schema_id = SCH.schema_id 
INNER JOIN sys.parameters PRM 
ON SEP.major_id = PRM.object_id 
AND SEP.minor_id = PRM.parameter_id 
WHERE SEP.class_desc = N'PARAMETER' 
union 
--DB 
SELECT 
'EXEC sys.sp_dropextendedproperty @name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
WHERE class_desc = N'DATABASE' 
union 
--schema 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.schemas SCH 
ON SEP.major_id = SCH.schema_id 
WHERE SEP.class_desc = N'SCHEMA' 
union 
--DATABASE_FILE 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''FILEGROUP'', @level0name = [' + DSP.name + '], @level1type = ''LOGICAL FILE NAME'', @level1name = ' + DBF.name + ' ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.database_files DBF 
ON SEP.major_id = DBF.file_id 
INNER JOIN sys.data_spaces DSP 
ON DBF.data_space_id = DSP.data_space_id 
WHERE SEP.class_desc = N'DATABASE_FILE' 
union 
--filegroup 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''FILEGROUP'', @level0name = [' + DSP.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.data_spaces DSP 
ON SEP.major_id = DSP.data_space_id 
WHERE DSP.type_desc = 'ROWS_FILEGROUP' 
+0

Điều này hoàn toàn phù hợp với tôi, cảm ơn. –

+0

Tập lệnh này cần được cập nhật để đảm bảo rằng tất cả các bảng hệ thống đều có tiền tố là "sys". để làm cho nó hoạt động trên SQL Server 2008 R2 Enterprise. – TheLegendaryCopyCoder

0

Trên kịch bản đề cập không hỗ trợ chức năng này, vì vậy tôi đã thêm nó vào kịch bản:

/* 
This script will generate calls to sp_dropextendedproperty for every 
extended property that exists in your database. 
Actually, a caveat: I don't promise that it will catch each and every 
extended property that exists, but I'm confident it will catch most of them! 

It is based on this: 
http://blog.hongens.nl/2010/02/25/drop-all-extended-properties-in-a-mssql-database/ 
by Angelo Hongens. 

Also had lots of help from this: 
http://www.sqlservercentral.com/articles/Metadata/72609/ 
by Adam Aspin 

Adam actually provides a script at that link to do something very similar 
but when I ran it I got an error: 
Msg 468, Level 16, State 9, Line 78 
Cannot resolve the collation conflict between "Latin1_General_100_CS_AS" and "Latin1_General_CI_AS" in the equal to operation. 

So I put together this version instead. 

Use at your own risk. 

Jamie Thomson 
2012-03-25 
*/ 


/*Are there any extended properties? Let's take a look*/ 
select *,OBJECT_NAME(major_id) from sys.extended_properties xp 

/*Now let's generate sp_dropextendedproperty statements for all of them.*/ 
--tables 
set nocount on; 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.tables t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--columns 
select 'EXEC sp_dropextendedproperty 
@name = '''+sys.extended_properties.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(extended_properties.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(extended_properties.major_id) + ''' 
,@level2type = ''column'' 
,@level2name = ''' + columns.name + '''' 
from sys.extended_properties 
join sys.columns 
on columns.object_id = extended_properties.major_id 
and columns.column_id = extended_properties.minor_id 
where extended_properties.class_desc = 'OBJECT_OR_COLUMN' 
and extended_properties.minor_id > 0 
union 
--check constraints 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.check_constraints cc  on xp.major_id = cc.object_id 
union 
--check constraints 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.default_constraints cc  on xp.major_id = cc.object_id 
union 
--views 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''view'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.views t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--sprocs 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''procedure'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.procedures t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--functions 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''function'' 
,@level1name = ''' + object_name(xp.major_id) + '''' 
from sys.extended_properties xp 
join sys.functions t on xp.major_id = t.object_id 
where xp.class_desc = 'OBJECT_OR_COLUMN' 
and xp.minor_id = 0 
union 
--FKs 
select 'EXEC sp_dropextendedproperty 
@name = '''+xp.name+''' 
,@level0type = ''schema'' 
,@level0name = ''' + object_schema_name(xp.major_id) + ''' 
,@level1type = ''table'' 
,@level1name = ''' + object_name(cc.parent_object_id) + ''' 
,@level2type = ''constraint'' 
,@level2name = ''' + cc.name + '''' 
from sys.extended_properties xp 
join sys.foreign_keys cc  on xp.major_id = cc.object_id 
union 
--PKs 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''TABLE'', @level1name = [' + TBL.name + '] , @level2type = ''CONSTRAINT'', @level2name = [' + SKC.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.tables TBL 
INNER JOIN sys.schemas SCH 
ON TBL.schema_id = SCH.schema_id 
INNER JOIN sys.extended_properties SEP 
INNER JOIN sys.key_constraints SKC 
ON SEP.major_id = SKC.object_id 
ON TBL.object_id = SKC.parent_object_id 
WHERE SKC.type_desc = N'PRIMARY_KEY_CONSTRAINT' 
union 
--Table triggers 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''TABLE'', @level1name = [' + TBL.name + '] , @level2type = ''TRIGGER'', @level2name = [' + TRG.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.tables TBL 
INNER JOIN sys.triggers TRG 
ON TBL.object_id = TRG.parent_id 
INNER JOIN sys.extended_properties SEP 
ON TRG.object_id = SEP.major_id 
INNER JOIN sys.schemas SCH 
ON TBL.schema_id = SCH.schema_id 
union 
--UDF params 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''FUNCTION'', @level1name = [' + OBJ.name + '] , @level2type = ''PARAMETER'', @level2name = [' + PRM.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.objects OBJ 
ON SEP.major_id = OBJ.object_id 
INNER JOIN sys.schemas SCH 
ON OBJ.schema_id = SCH.schema_id 
INNER JOIN sys.parameters PRM 
ON SEP.major_id = PRM.object_id 
AND SEP.minor_id = PRM.parameter_id 
WHERE SEP.class_desc = N'PARAMETER' 
AND OBJ.type IN ('FN', 'IF', 'TF') 
union 
--sp params 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '], @level1type = ''PROCEDURE'', @level1name = [' + SPR.name + '] , @level2type = ''PARAMETER'', @level2name = [' + PRM.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.procedures SPR 
ON SEP.major_id = SPR.object_id 
INNER JOIN sys.schemas SCH 
ON SPR.schema_id = SCH.schema_id 
INNER JOIN sys.parameters PRM 
ON SEP.major_id = PRM.object_id 
AND SEP.minor_id = PRM.parameter_id 
WHERE SEP.class_desc = N'PARAMETER' 
union 
--DB 
SELECT 
'EXEC sys.sp_dropextendedproperty @name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
WHERE class_desc = N'DATABASE' 
union 
--schema 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''SCHEMA'', @level0name = [' + SCH.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.schemas SCH 
ON SEP.major_id = SCH.schema_id 
WHERE SEP.class_desc = N'SCHEMA' 
union 
--DATABASE_FILE 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''FILEGROUP'', @level0name = [' + DSP.name + '], @level1type = ''LOGICAL FILE NAME'', @level1name = ' + DBF.name + ' ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.database_files DBF 
ON SEP.major_id = DBF.file_id 
INNER JOIN sys.data_spaces DSP 
ON DBF.data_space_id = DSP.data_space_id 
WHERE SEP.class_desc = N'DATABASE_FILE' 
union 
--filegroup 
SELECT 
'EXEC sys.sp_dropextendedproperty @level0type = N''FILEGROUP'', @level0name = [' + DSP.name + '] ,@name = ''' + REPLACE(CAST(SEP.name AS NVARCHAR(300)),'''','''''') + '''' 
FROM sys.extended_properties SEP 
INNER JOIN sys.data_spaces DSP 
ON SEP.major_id = DSP.data_space_id 
WHERE DSP.type_desc = 'ROWS_FILEGROUP' 
+0

sys.functions không tồn tại. Bạn đang chạy phiên bản SQLServer nào? – TheLegendaryCopyCoder

3

Câu trả lời trước không hoạt động chính xác cho tôi - chúng không xóa thuộc tính mở rộng cho trình kích hoạt cơ sở dữ liệu, bộ sưu tập hoặc chỉ mục lược đồ xml. Tôi tìm thấy điều này script to delete extended properties (nhận xét được dịch từ tiếng Nhật bằng Google dịch), đã hoạt động hoàn hảo cho tôi.

Cảnh báo: này thực loại bỏ tất cả các thuộc tính mở rộng, chứ không phải xuất ra một truy vấn để làm như vậy, như câu trả lời trước làm. Thay vào đó, thay đổi hành vi để xuất truy vấn, hãy thay đổi từng số EXEC (@sql) thành PRINT (@sql).

DECLARE @prop_name sysname 
DECLARE @schema_name sysname 
DECLARE @name sysname 
DECLARE @name2 sysname 
DECLARE @sql nvarchar(max) 

-- Delete extended properties database 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT name FROM sys.extended_properties where class = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'USE [master];EXEC ' + QUOTENAME(DB_NAME()) + N'.sys.sp_dropextendedproperty @name=N''' + @prop_name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Remove schema extension property 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(s.schema_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.schemas s ON s.schema_id = ep.major_id 
WHERE ep.class = 3 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + '''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 

-- Delete extended properties of a file group 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT f.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.filegroups f ON f.data_space_id = ep.major_id 
WHERE ep.class = 20 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''FILEGROUP'',' + 
    N'@level0name=N''' + @name + '''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of a file 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT f.name, sf.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.filegroups f ON f.data_space_id = ep.major_id 
INNER JOIN sys.sysfiles sf ON sf.groupid = f.data_space_id 
WHERE ep.class = 22 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''FILEGROUP'',' + 
    N'@level0name=N''' + @name + ''', ' + 
    N'@level1type=N''Logical File Name'',' + 
    N'@level1name=N''' + @name2 + '''' 

    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 

-- Remove the expansion properties of the XML schema collection 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(x.schema_id), x.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.xml_schema_collections x ON x.xml_collection_id = ep.major_id 
WHERE ep.class = 10 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''XML SCHEMA COLLECTION'',' + 
    N'@level1name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of a table 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(t.schema_id), OBJECT_NAME(t.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.tables t ON t.object_id = ep.major_id 
WHERE ep.class = 1 AND ep.minor_id = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''TABLE'',' + 
    N'@level1name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of view 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(v.schema_id), OBJECT_NAME(v.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.views v ON v.object_id = ep.major_id 
WHERE ep.class = 1 AND ep.minor_id = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''VIEW'',' + 
    N'@level1name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of the index 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), i.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type IN ('U') 
INNER JOIN sys.indexes i ON i.object_id = ep.major_id AND i.index_id = ep.minor_id 
WHERE ep.class = 7 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''TABLE'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''INDEX'',' + 
    N'@level2name=N''' + @name2 + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 

-- Delete extended properties of the index of the view 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), i.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type IN ('V') 
INNER JOIN sys.indexes i ON i.object_id = ep.major_id AND i.index_id = ep.minor_id 
WHERE ep.class = 7 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''VIEW'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''INDEX'',' + 
    N'@level2name=N''' + @name2 + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of the function 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type IN ('FN', 'TF') 
WHERE ep.class = 1 AND ep.minor_id = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''FUNCTION'',' + 
    N'@level1name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 

-- Delete extended properties of the parameters of the function 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), p.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type IN ('FN', 'TF') 
INNER JOIN sys.parameters p ON p.object_id = ep.major_id AND p.parameter_id = ep.minor_id 
WHERE ep.class = 2 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''FUNCTION'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''PARAMETER'',' + 
    N'@level2name=N''' + @name2 + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of the stored procedure 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(p.schema_id), OBJECT_NAME(p.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.procedures p ON p.object_id = ep.major_id 
WHERE ep.class = 1 AND ep.minor_id = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''PROCEDURE'',' + 
    N'@level1name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of the parameters of a stored procedure 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), p.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type = 'P' 
INNER JOIN sys.parameters p ON p.object_id = ep.major_id AND p.parameter_id = ep.minor_id 
WHERE ep.class = 2 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', '+ 
    N'@level1type=N''PROCEDURE'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''PARAMETER'',' + 
    N'@level2name=N''' + @name2 + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of DDL trigger 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT t.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.triggers t ON t.object_id = ep.major_id AND t.parent_class = 0 
WHERE ep.class = 1 AND ep.minor_id = 0 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @name, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''TRIGGER'',' + 
    N'@level0name=N''' + @name + N'''' 
    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @name, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- Delete extended properties of DML trigger 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), p.name, OBJECT_NAME(o.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id AND o.type = 'TR' 
INNER JOIN sys.objects p ON o.parent_object_id = p.object_id 
WHERE ep.class = 1 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', ' + 
    N'@level1type=N''TABLE'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''TRIGGER'',' + 
    N'@level2name=N''' + @name2 + N'''' 

    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 

-- Delete extended properties of the constraint 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(c.schema_id), OBJECT_NAME(c.parent_object_id), OBJECT_NAME(c.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.check_constraints c ON c.object_id = ep.major_id 
WHERE ep.class = 1 and ep.minor_id = 0 
UNION 
SELECT SCHEMA_NAME(c.schema_id), OBJECT_NAME(c.parent_object_id), OBJECT_NAME(c.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.default_constraints c ON c.object_id = ep.major_id 
WHERE ep.class = 1 and ep.minor_id = 0 
UNION 
SELECT SCHEMA_NAME(c.schema_id), OBJECT_NAME(c.parent_object_id), OBJECT_NAME(c.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.foreign_keys c ON c.object_id = ep.major_id 
WHERE ep.class = 1 and ep.minor_id = 0 
UNION 
SELECT SCHEMA_NAME(c.schema_id), OBJECT_NAME(c.parent_object_id), OBJECT_NAME(c.object_id), ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.key_constraints c ON c.object_id = ep.major_id 
WHERE ep.class = 1 and ep.minor_id = 0 


OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', ' + 
    N'@level1type=N''TABLE'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''CONSTRAINT'',' + 
    N'@level2name=N''' + @name2 + N'''' 

    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 


-- To delete an extended property of the column 
DECLARE PROP_CURSOR CURSOR FOR 
SELECT SCHEMA_NAME(o.schema_id), OBJECT_NAME(o.object_id), c.name, ep.name 
FROM sys.extended_properties ep 
INNER JOIN sys.objects o ON o.object_id = ep.major_id 
INNER JOIN sys.columns c ON c.object_id = o.object_id AND c.column_id = ep.minor_id 
WHERE ep.class = 1 

OPEN PROP_CURSOR 

FETCH NEXT FROM PROP_CURSOR 
INTO @schema_name, @name, @name2, @prop_name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = N'EXEC sys.sp_dropextendedproperty ' + 
    N'@name=N''' + @prop_name + N''',' + 
    N'@level0type=N''SCHEMA'',' + 
    N'@level0name=N''' + @schema_name + ''', ' + 
    N'@level1type=N''TABLE'',' + 
    N'@level1name=N''' + @name + N''', ' + 
    N'@level2type=N''COLUMN'',' + 
    N'@level2name=N''' + @name2 + N'''' 

    EXEC (@sql) 

    FETCH NEXT FROM PROP_CURSOR 
    INTO @schema_name, @name, @name2, @prop_name 
END 
CLOSE PROP_CURSOR 
DEALLOCATE PROP_CURSOR 
Các vấn đề liên quan