Hello all in ExpertExchange;
I need to add Extended Properties to hundreds of columns for many tables and would like to create a script of some kind. I have a table with 3 columns, Table_Name, Column_Name and Caption_Name and would like the output to look something like this:
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors
GO
CREATE TABLE #tmpErrors (Error int)
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
GO
PRINT N'Creating Extended Properties for Table OnTrack'
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'Caption' , N'SCHEMA',N'dbo', N'TABLE',N'OnTrack', N'COLUMN',N'ON_TRACK_ID'))
EXEC sys.sp_addextendedproperty @name = N'Caption',
@value = 'Database Identifier column.',
@level0type = N'Schema', @level0name = 'dbo',
@level1type = N'Table', @level1name = 'OnTrack',
@level2type = N'Column', @level2name = 'ON_TRACK_ID';
GO
IF @@ERROR<>0 AND @@TRANCOUNT>0 ROLLBACK TRANSACTION
GO
.
.
.
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT 'The update to the database was succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT 'The update to the database failed.'
GO
DROP TABLE #tmpErrors
GO
Would this be a good place for a cursor?
Naturally uncomment the "EXEC(@sql)" when the code looks good enough to you to run :-) .
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRY
BEGIN TRANSACTION
DECLARE @sql nvarchar(max)
PRINT N'Creating Extended Properties for Table OnTrack'
SELECT @sql = (SELECT '
EXEC sys.sp_addextendedproperty
'@value = ''' + c.caption + ''', ' +
'@level0type = N''Schema'', @level0name = ''dbo'', ' +
'@level1type = N''Table'', @level1name = ''OnTrack'', ' +
'@level2type = N''Column'', @level2name = ''' + c.column_name + ''';'
FROM dbo.captions c
WHERE
c.table_name = 'OnTrack' AND
NOT EXISTS (
SELECT 1
FROM ::fn_listextendedproperty(
)
ORDER BY c.column_name
FOR XML PATH('')
)
PRINT @sql
--EXEC(@sql)
COMMIT TRANSACTION
PRINT 'The update to the database succeeded.'
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION
PRINT 'The update to the database failed.'
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH