需要:读取库里面所有 表、以及表描述、 列、列描述
create PROCEDURE [dbo].[ProGetAllTableName] AS BEGIN --开启事物 BEGIN TRAN tran_insert ----删除表 (不做判断 特殊处理) DELETE from _Columns; DELETE from _Tables; INSERT INTO [_Tables] Select NEWID(), --Id so.name AS tableName, --TbName CONVERT(Varchar(50),ISNULL((SELECT value FROM sys.extended_properties where major_id=so.id AND minor_id=0),so.name) ) AS tableNameDetails--TbDetails FROM SysObjects so Where (so.XType=\'U\' OR so.XType=\'V\') AND( CHARINDEX(\'_\',so.name)!=1 ) ; INSERT INTO [dbo].[_Columns] SELECT NEWID(), --Id a.name AS FieldName , --ColName CONVERT(Varchar(50),isnull(g.[value],a.name) ) AS FieldDesc ,--ColDetails d.NAME AS TabName --TbName FROM syscolumns a inner join sysobjects d on a.id=d.id and (d.xtype=\'U\' or d.xtype=\'V\') and d.name<>\'dtproperties\' and charindex(\'_\',d.name)<1 left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id order by d.NAME, a.colorder --结束事物 COMMIT TRAN tran_insert END
ps:
SELECT d.NAME AS TabName ,isnull(f.value,\' \') TabDesc ,a.colorder AS FieldIdx ,a.name AS FieldName , (case when COLUMNPROPERTY(a.id,a.name,\'IsIdentity\')=1 then 1 else 0 END ) AS IsIdentity ,ispk=case when ic.index_id is not null then 1 else 0 end , b.name AS FieldType,COLUMNPROPERTY(a.id,a.name,\'PRECISION\') AS FieldLength, isnull(COLUMNPROPERTY(a.id,a.name,\'Scale\'),0) AS Scale,(case when a.isnullable=1 then 1 ELSE 0 END ) AS isAllowNull, isnull(e.text,\'\') AS FieldDefaultValue, isnull(g.[value],\' \') AS FieldDesc FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and (d.xtype=\'U\' or d.xtype=\'V\') and d.name<>\'dtproperties\' and charindex(\'_\',d.name)<1 left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id left join sys.extended_properties f on d.id=f.major_id and f.minor_id =0 left join sys.indexes ix on d.id=ix.object_id and ix.is_primary_key=1 left join sys.index_columns ic on ix.object_id=ic.object_id and a.colid=ic.column_id and ix.index_id=ic.index_id order by d.NAME
--后续 :记录sql管理维护
场景1:查看所有的表名称(很多时候 不知道表,也不知道表叫什么名称,只记得备注)。
vw_tableDes
create view [dbo].[vw_TableDes] as select TableCode=object_name(major_id) ,TableName=cast([value] as nvarchar(100)) from sys.extended_properties where minor_id=0
要求在建表的时候 需要维护扩展属性:
场景2:有查看所有表,就有查看字段
这里以GGUser为测试 (只备注了name)
create procedure [dbo].[up_Help] @objname nvarchar(776) = NULL -- object name we\'re after as -- PRELIMINARY set nocount on SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; declare @dbname sysname ,@no varchar(35), @yes varchar(35), @none varchar(35) select @no = \'no\', @yes = \'yes\', @none = \'none\' -- If no @objname given, give a little info about all objects. if @objname is null begin -- DISPLAY ALL SYSOBJECTS -- if (serverproperty(\'EngineEdition\') != 5) begin select \'Name\' = o.name, \'Desc\' = e.value, \'Owner\' = user_name(ObjectProperty( object_id, \'ownerid\')), \'Object_type\' = substring(v.name,5,31) from sys.all_objects o inner join master.dbo.spt_values v on o.type = substring(v.name,1,2) collate database_default and v.type = \'O9T\' left join sys.extended_properties e on o.object_id=e.major_id and e.minor_id=0 order by [Owner] asc, Object_type desc, Name asc end else begin select \'Name\' = o.name, \'Desc\' = e.value, \'Owner\' = user_name(ObjectProperty( object_id, \'ownerid\')), \'Object_type\' = substring(v.name,5,31) from sys.all_objects o inner join sys.spt_values v on o.type = substring(v.name,1,2) collate database_default and v.type = \'O9T\' left join sys.extended_properties e on o.object_id=e.major_id and e.minor_id=0 order by [Owner] asc, Object_type desc, Name asc end print \' \' -- DISPLAY ALL USER TYPES select \'User_type\' = name, \'Storage_type\' = type_name(system_type_id), \'Length\' = max_length, --\'Prec\' = Convert(int,TypePropertyEx(user_type_id, \'precision\')), --\'Scale\' = Convert(int,TypePropertyEx(user_type_id, \'scale\')), \'Nullable\' = case when is_nullable = 1 then @yes else @no end, \'Default_name\' = isnull(object_name(default_object_id), @none), \'Rule_name\' = isnull(object_name(rule_object_id), @none), \'Collation\' = collation_name from sys.types where user_type_id > 256 order by name return(0) end -- Make sure the @objname is local to the current database. select @dbname = parsename(@objname,3) if @dbname is null select @dbname = db_name() else if @dbname <> db_name() begin raiserror(15250,-1,-1) return(1) end -- @objname must be either sysobjects or systypes: first look in sysobjects declare @objid int declare @sysobj_type char(2) select @objid = object_id, @sysobj_type = type from sys.all_objects where object_id = object_id(@objname) -- IF NOT IN SYSOBJECTS, TRY SYSTYPES -- if @objid is null begin -- UNDONE: SHOULD CHECK FOR AND DISALLOW MULTI-PART NAME select @objid = type_id(@objname) -- IF NOT IN SYSTYPES, GIVE UP if @objid is null begin raiserror(15009,-1,-1,@objname,@dbname) return(1) end -- DATA TYPE HELP (prec/scale only valid for numerics) select \'Type_name\' = name, \'Storage_type\' = type_name(system_type_id), \'Length\' = max_length, --\'Prec\' = Convert(int,TypePropertyEx(user_type_id, \'precision\')), --\'Scale\' = Convert(int,TypePropertyEx(user_type_id, \'scale\')), \'Nullable\' = case when is_nullable=1 then @yes else @no end, \'Default_name\' = isnull(object_name(default_object_id), @none), \'Rule_name\' = isnull(object_name(rule_object_id), @none), \'Collation\' = collation_name from sys.types where user_type_id = @objid return(0) end -- FOUND IT IN SYSOBJECT, SO GIVE OBJECT INFO if (serverproperty(\'EngineEdition\') != 5) begin select \'Name\' = o.name, \'Desc\' = (select top 1 value from sys.extended_properties where major_id=@objid and minor_id=0), \'Owner\' = user_name(ObjectProperty( object_id, \'ownerid\')), \'Type\' = substring(v.name,5,31), \'Created_datetime\' = o.create_date from sys.all_objects o, master.dbo.spt_values v where o.object_id = @objid and o.type = substring(v.name,1,2) collate database_default and v.type = \'O9T\' end else begin select \'Name\' = o.name, \'Desc\' = (select top 1 value from sys.extended_properties where major_id=@objid and minor_id=0), \'Owner\' = user_name(ObjectProperty( object_id, \'ownerid\')), \'Type\' = substring(v.name,5,31), \'Created_datetime\' = o.create_date from sys.all_objects o, sys.spt_values v where o.object_id = @objid and o.type = substring(v.name,1,2) collate database_default and v.type = \'O9T\' end print \' \' -- DISPLAY COLUMN IF TABLE / VIEW if exists (select * from sys.all_columns where object_id = @objid) begin -- SET UP NUMERIC TYPES: THESE WILL HAVE NON-BLANK PREC/SCALE -- There must be a \',\' immediately after each type name (including last one), -- because that\'s what we\'ll search for in charindex later. declare @precscaletypes nvarchar(150) select @precscaletypes = N\'tinyint,smallint,decimal,int,bigint,real,money,float,numeric,smallmoney,date,time,datetime2,datetimeoffset,\' -- INFO FOR EACH COLUMN print \' \' select \'Column_name\' = cl.name, \'Column_Desc\' = ep.value, \'Type\' = type_name(user_type_id), \'Computed\' = case when ColumnProperty(object_id, cl.name, \'IsComputed\') = 0 then @no else @yes end, \'Length\' = convert(int, max_length), -- for prec/scale, only show for those types that have valid precision/scale -- Search for type name + \',\', because \'datetime\' is actually a substring of \'datetime2\' and \'datetimeoffset\' \'Prec\' = case when charindex(type_name(system_type_id) + \',\', @precscaletypes) > 0 then convert(char(5),ColumnProperty(object_id, cl.name, \'precision\')) else \' \' end, \'Scale\' = case when charindex(type_name(system_type_id) + \',\', @precscaletypes) > 0 then convert(char(5),OdbcScale(system_type_id,scale)) else \' \' end, \'Nullable\' = case when is_nullable = 0 then @no else @yes end, \'TrimTrailingBlanks\' = case ColumnProperty(object_id, cl.name, \'UsesAnsiTrim\') when 1 then @no when 0 then @yes else \'(n/a)\' end, \'FixedLenNullInSource\' = case when type_name(system_type_id) not in (\'varbinary\',\'varchar\',\'binary\',\'char\') then \'(n/a)\' when is_nullable = 0 then @no else @yes end, \'Collation\' = collation_name from sys.all_columns cl left join sys.extended_properties ep on cl.object_id=ep.major_id and ep.minor_id=cl.column_id where object_id = @objid order by cl.column_id --select * from sys.all_columns -- IDENTITY COLUMN? --if @sysobj_type in (\'S \',\'U \',\'V \',\'TF\') --begin -- print \' \' -- declare @colname sysname -- select @colname = col_name(@objid, column_id) from sys.identity_columns where object_id = @objid -- select -- \'Identity\' = isnull(@colname,\'No identity column defined.\'), -- \'Seed\' = ident_seed(@objname), -- \'Increment\' = ident_incr(@objname), -- \'Not For Replication\' = ColumnProperty(@objid, @colname, \'IsIDNotForRepl\') -- -- ROWGUIDCOL? -- print \' \' -- select @colname = null -- select @colname = name from sys.columns where object_id = @objid and is_rowguidcol = 1 -- select \'RowGuidCol\' = isnull(@colname,\'No rowguidcol column defined.\') --end end EXEC sys.sp_helpindex @objname -- DISPLAY ANY PARAMS --if exists (select * from sys.all_parameters where object_id = @objid) --begin -- -- INFO ON PROC PARAMS -- print \' \' -- select -- \'Parameter_name\' = name, -- \'Type\' = type_name(user_type_id), -- \'Length\' = max_length, -- \'Prec\' = case when type_name(system_type_id) = \'uniqueidentifier\' then precision -- else OdbcPrec(system_type_id, max_length, precision) end, -- \'Scale\' = OdbcScale(system_type_id, scale), -- \'Param_order\' = parameter_id, -- \'Collation\' = convert(sysname, case when system_type_id in (35, 99, 167, 175, 231, 239) -- then ServerProperty(\'collation\') end) -- from sys.all_parameters where object_id = @objid --end -- DISPLAY TABLE INDEXES & CONSTRAINTS --if @sysobj_type in (\'S \',\'U \') --begin -- print \' \' -- EXEC sys.sp_objectfilegroup @objid -- print \' \' -- EXEC sys.sp_helpindex @objname -- print \' \' -- EXEC sys.sp_helpconstraint @objname,\'nomsg\' -- if (select count(*) from sysdepends where depid = @objid and deptype = 1) = 0 -- begin -- raiserror(15647,-1,-1,@objname) -- No views with schemabinding reference table \'%ls\'. -- end -- else -- begin -- select distinct \'Table is referenced by views\' = obj.name from sys.objects obj, sysdepends deps -- where obj.type =\'V\' and obj.object_id = deps.id and deps.depid = @objid -- and deps.deptype = 1 group by obj.name -- end --end --else if @sysobj_type in (\'V \') --begin -- -- VIEWS DONT HAVE CONSTRAINTS, BUT PRINT THESE MESSAGES BECAUSE 6.5 DID -- print \' \' -- raiserror(15469,-1,-1,@objname) -- No constraints defined -- print \' \' -- raiserror(15470,-1,-1,@objname) -- No foreign keys reference table \'%ls\'. -- EXEC sys.sp_helpindex @objname --end return (0) -- sp_help
建表工具 一般使用PowerDesigner 当然直接在sql 里面也没问题。
-附加sql 建表 文件 父子结构 https://www.cnblogs.com/kissdodog/p/3297894.html
--demo
CREATE TABLE [dbo].[FeFileLIst]( [Id] [uniqueidentifier] NOT NULL, [FDBId] [int] NOT NULL, [AccId] [smallint] NOT NULL, [ClassCode] [varchar](50) NOT NULL, [FileCode] [varchar](50) NOT NULL, [FileName] [nvarchar](200) NOT NULL, [ExteName] [varchar](20) NULL, [FileSize] [decimal](18, 2) NULL, [FilePath] [nvarchar](1000) NOT NULL, [Creator] [nvarchar](50) NULL, [CreatorCode] [varchar](50) NULL, [CreateDate] [datetime] NULL, [Updater] [nvarchar](50) NULL, [UpdaterCode] [varchar](50) NULL, [UpdateDate] [datetime] NULL, [IsDelete] [tinyint] NOT NULL, [OperDept] [nvarchar](20) NULL, [RoCode] [varchar](50) NULL, CONSTRAINT [PK_FeFileLIst] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[FeFileLIst] ADD DEFAULT (newsequentialid()) FOR [Id] GO ALTER TABLE [dbo].[FeFileLIst] ADD DEFAULT ((1)) FOR [FDBId] GO ALTER TABLE [dbo].[FeFileLIst] ADD DEFAULT ((0)) FOR [IsDelete] GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'Id\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'Id\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'帐套Id\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'FDBId\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'AccId\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'AccId\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'分类编码\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'ClassCode\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'文件编码\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'FileCode\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'文件名称\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'FileName\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'扩展名\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'ExteName\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'文件大小(M)\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'FileSize\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'文件路径\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'FilePath\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'创建人\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'Creator\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'创建人编码\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'CreatorCode\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'创建日期\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'CreateDate\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'更新人\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'Updater\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'更新人编码\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'UpdaterCode\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'更新日期\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'UpdateDate\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'删除标记\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'IsDelete\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'操作部门\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'OperDept\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'角色编码\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\', @level2type=N\'COLUMN\',@level2name=N\'RoCode\' GO EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'文件管理列表\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'FeFileLIst\' GO
ALTER view [dbo].[v_LkpFileManage] as WITH COMMENT_CTE(id,pId,name,tLevel,isParen,Codetypes,keyIdExtend,Paths)AS( /*基本语句*/ SELECT t.ClassCode as id, t.ParentCode as pId ,t.ClassName as name, 0 AS tLevel ,isParen=CAST( \'true\' as nvarchar(10)) ,t.GroupCode as Codetypes ,t.id as keyIdExtend ,Paths=cast(t.ClassName as nvarchar(2000)) FROM LkpFileManage t WHERE ParentCode =\'\' and IsDelete=0 and IsEnable=1 UNION ALL /*递归语句*/ SELECT t.ClassCode as id, t.ParentCode as pId ,t.ClassName as name,ce.tLevel + 1 ,isParen=CAST( \'fasle\' as nvarchar(10)) ,t.GroupCode as Codetypes,t.Id ,Paths=cast(ce.Paths+\'->\'+t.ClassName as nvarchar(2000)) FROM LkpFileManage t INNER JOIN COMMENT_CTE AS ce ON t.ParentCode = ce.id where IsEnable=1 ) SELECT * FROM COMMENT_CTE GO