SQL 批量更新表说明信息

--依据已知表说明批量更新数据库表说明信息,创建存储过程,进行调用
/****** Object: StoredProcedure [dbo].[UpTableDescription] Script Date: 09/09/2019 10:30:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[UpTableDescription]
AS
BEGIN
DECLARE @tbname NVARCHAR(100)
DECLARE @tbDescription NVARCHAR(max)
DECLARE @tbDescription1 NVARCHAR(max)
DECLARE @sqlstr NVARCHAR(max)
DECLARE @CTableName NVARCHAR(max)
DECLARE @DE NVARCHAR(max)

DECLARE user_cur CURSOR FOR --查询系统表
SELECT * FROM (SELECT distinct
表名 = case when a.colorder=1 then d.name else '' end,
表说明 = case when a.colorder=1 then convert(nvarchar(max),isnull(f.value,'')) else '' end
FROM
syscolumns a
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left JOIN sys.extended_properties f on d.id=f.major_id and f.minor_id=0) tb
WHERE 表名 <>'' AND 表名 IS NOT NULL AND tb.表说明=''

OPEN user_cur
FETCH NEXT FROM user_cur INTO @tbname,@tbDescription --循环系统表
WHILE @@fetch_status<>-1
BEGIN
--1. 判断erp数据字典是否存在此信息
SET @CTableName=''
SET @DE=''
SET @tbDescription1=@tbDescription
SET @sqlstr=' SELECT DISTINCT @mt=[CTableName],@DE=[DE] FROM dbo.T_1
where Etablename='''+@tbname +''''
exec sp_executesql @sqlstr,N'@mt nvarchar(max) output,@DE nvarchar(max) output',@CTableName OUTPUT,@DE OUTPUT

IF @tbname<>''
BEGIN
IF @DE<>'' --erp数据字典存在此说明信息
SET @DE=@CTableName+':'+ @DE
ELSE
SET @DE=@CTableName
END
IF @tbDescription<>'' ---1.系统表注释存在
BEGIN
SET @sqlstr='EXEC sys.sp_dropextendedproperty @name=N''MS_Description'' ,
@level0type=N''SCHEMA'',
@level0name=N''dbo'',
@level1type=N''TABLE'',
@level1name=N'''+@tbname+''''
EXEC(@sqlstr)
SET @tbDescription=''
END

IF @tbDescription='' ---1.系统表注释不存在
BEGIN
SET @sqlstr='EXEC sys.sp_addextendedproperty @name=''MS_Description'',
@value = '''+@DE+''' ,
@level0type = ''SCHEMA'',
@level0name = N''dbo'',
@level1type = N''TABLE'',
@level1name = '''+@tbname+''''
EXEC(@sqlstr)
END
ELSE
BEGIN
SET @sqlstr='EXEC sys.sp_updateextendedproperty @name=''MS_Description'',
@value = '''+@DE+''' ,
@level0type = ''SCHEMA'',
@level0name = N''dbo'',
@level1type = N''TABLE'',
@level1name = '''+@tbname+''''
EXEC(@sqlstr)
END

FETCH NEXT FROM user_cur INTO @tbname,@tbDescription
END
CLOSE user_cur
DEALLOCATE user_cur


END

--EXEC UpTableDescription  调用存储过程 

猜你喜欢

转载自www.cnblogs.com/zhou0811/p/11495406.html