Check if extended property description already exists before adding Check if extended property description already exists before adding sql sql

Check if extended property description already exists before adding


This first script checks if the extended property describing the table exists:

IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES WHERE [major_id] = OBJECT_ID('Table_Name') AND [name] = N'MS_Description' AND [minor_id] = 0)EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'This table is responsible for holding information.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Table_Name';

This second script checks if the extended property describing the column exists:

IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES WHERE [major_id] = OBJECT_ID('Table_Name') AND [name] = N'MS_Description' AND [minor_id] = (SELECT [column_id] FROM SYS.COLUMNS WHERE [name] = 'Column_Name' AND [object_id] = OBJECT_ID('Table_Name')))EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'This column is responsible for holding information for table Table_Name.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Table_Name', @level2type = N'COLUMN', @level2name = N'Column_Name';


Here is another stored procedure approach, similar to Ruslan K.'s, but that doesn't involve try/catch or explicit transactions:

-- simplify syntax for maintaining data dictionaryIF OBJECT_ID ('dbo.usp_addorupdatedescription', 'P') IS NOT NULL    DROP PROCEDURE dbo.usp_addorupdatedescription;GOCREATE PROCEDURE usp_addorupdatedescription        @table nvarchar(128),  -- table name        @column nvarchar(128), -- column name, NULL if description for table        @descr sql_variant     -- description textAS    BEGIN        SET NOCOUNT ON;        IF @column IS NOT NULL            IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES            WHERE [major_id] = OBJECT_ID(@table) AND [name] = N'MS_Description'                  AND [minor_id] = (SELECT [column_id]                                    FROM SYS.COLUMNS WHERE [name] = @column AND [object_id] = OBJECT_ID(@table)))                EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = @descr,                                               @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE',                                               @level1name = @table, @level2type = N'COLUMN', @level2name = @column;            ELSE                EXECUTE sp_updateextendedproperty @name = N'MS_Description',                                                  @value = @descr, @level0type = N'SCHEMA', @level0name = N'dbo',                                                  @level1type = N'TABLE', @level1name = @table,                                                  @level2type = N'COLUMN', @level2name = @column;        ELSE            IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES            WHERE [major_id] = OBJECT_ID(@table) AND [name] = N'MS_Description'                  AND [minor_id] = 0)                EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = @descr,                                               @level0type = N'SCHEMA', @level0name = N'dbo',                                               @level1type = N'TABLE', @level1name = @table;            ELSE                EXECUTE sp_updateextendedproperty @name = N'MS_Description', @value = @descr,                                                  @level0type = N'SCHEMA', @level0name = N'dbo',                                                  @level1type = N'TABLE', @level1name = @table;    ENDGO


I wrote simple stored procedure to add or update extended property 'MS_Description':

IF OBJECT_ID ('dbo.usp_addorupdatedescription', 'P') IS NOT NULL    DROP PROCEDURE dbo.usp_addorupdatedescription;GOCREATE PROCEDURE usp_addorupdatedescription    @table nvarchar(128),  -- table name    @column nvarchar(128), -- column name, NULL if description for table    @descr sql_variant     -- description textASBEGIN    SET NOCOUNT ON;    DECLARE @c nvarchar(128) = NULL;    IF @column IS NOT NULL        SET @c = N'COLUMN';    BEGIN TRY        EXECUTE sp_updateextendedproperty  N'MS_Description', @descr, N'SCHEMA', N'dbo', N'TABLE', @table, @c, @column;    END TRY    BEGIN CATCH        EXECUTE sp_addextendedproperty N'MS_Description', @descr, N'SCHEMA', N'dbo', N'TABLE', @table, @c, @column;    END CATCH;ENDGO