, "", /. SchemaName, TableName, ColumnName Description. TRIGGER , SQL Server sp_addextendedproperty (Transact-SQL) sp_dropextendedproperty (Transact-SQL) / / schema.table.column.
:
DescriptionHolder
SchemaName sysname
TableName sysname
ColumnName sysname
Description varchar(7500) --or nvarchar(3750)
:
CREATE TRIGGER trigger_DescriptionHolder ON DescriptionHolder
INSTEAD OF INSERT,UPDATE,DELETE
AS
SET NOCOUNT ON
IF EXISTS (SELECT * FROM INSERTED)
BEGIN
EXECUTE sp_addextendedproperty N'MS_Description', <INSERTED.Description>
,N'SCHEMA' , <INSERTED.SchemaName>
,N'TABLE' , <INSERTED.TableName>
,N'COLUMN' , <INSERTED.ColumnName>
END
ELSE IF EXISTS(SELECT * FROM DELETED)
BEGIN
EXECUTE sp_dropextendedproperty ...
END
, , :
IF EXISTS (SELECT 1 AS x
FROM DescriptionHolder h
WHERE NOT EXISTS (SELECT 1
from sys.extended_properties p
inner join sys.objects o ON p.major_id=o.object_id
inner join sys.schemas s ON o.schema_id=s.schema_id
inner join sys.columns c ON o.object_id=c.object_id and p.minor_id=c.column_id
where h.SchemaName=s.name AND h.TableName=o.name AND h.ColumnName=c.name)
UNION ALL
select 2 AS x
from sys.extended_properties p
inner join sys.objects o ON p.major_id=o.object_id
inner join sys.schemas s ON o.schema_id=s.schema_id
inner join sys.columns c ON o.object_id=c.object_id and p.minor_id=c.column_id
where p.class=1 and p.Name='MS_Description'
AND not exists (SELECT 1 FROM DescriptionHolder h WHERE s.name=h.SchemaName AND o.name=h.TableName AND c.name=h.ColumnName)
)
BEGIN
RAISERROR('sys.extended_properties and DescriptionHolder do not match',16,1)
ROLLBACK
RETURN
END
this code will roll back and cancel the launch if the DescriptionHolder is not 100% synchronized with the actual column descriptions in the database.
source
share