一、查询单张表
1.1 根据表名查询表结构
--快速查看表结构(比较全面的)DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'YMUS'; --表名!!!SELECT CASE WHEN col.colorder = 1 THEN obj.name ELSE obj.name END AS 表名, col.colorder AS 序号, col.name AS 列名, ISNULL(ep.[value], '') AS 列说明, t.name AS 数据类型, col.length AS 长度, ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数, CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS ( SELECT 1 FROM dbo.sysindexes si INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN dbo.sysobjects so ON so.name = si.name AND so.xtype = 'PK' WHERE sc.id = col.id AND sc.colid = col.colid ) THEN '√' ELSE '' END AS 主键, CASE WHEN col.isnullable = 1 THEN '√' ELSE '' END AS 允许空, ISNULL(comm.text, '') AS 默认值FROM dbo.syscolumns col LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype INNER JOIN dbo.sysobjects obj ON col.id = obj.id AND obj.xtype = 'U' AND obj.status >= 0 LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id AND col.colid = ep.minor_id AND ep.name = 'MS_Description' LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id AND epTwo.minor_id = 0 AND epTwo.name = 'MS_Description'WHERE obj.name = @tableName --表名ORDER BY col.colorder;
1.2 存储过程封装
IF OBJECT_ID('er1.export_result_records', 'P') IS NOT NULL DROP PROCEDURE er1.export_result_records;GO--快速查看表结构(比较全面的)CREATE PROCEDURE er1.export_result_records@tableName NVARCHAR(MAX)ASBEGINDELETE FROM er1.a01_table_info WHERE CAST(表名 AS nvarchar(max)) = @tableName ;INSERT INTO er1.a01_table_info(表名,序号,列名,列说明,数据类型,长度,小数位数,标识,主键,允许空,默认值)SELECT CASE WHEN col.colorder = 1 THEN obj.name ELSE obj.name END AS 表名, col.colorder AS 序号, col.name AS 列名, ISNULL(ep.[value], '') AS 列说明, t.name AS 数据类型, col.length AS 长度, ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数, CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS ( SELECT 1 FROM dbo.sysindexes si INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN dbo.sysobjects so ON so.name = si.name AND so.xtype = 'PK' WHERE sc.id = col.id AND sc.colid = col.colid ) THEN '√' ELSE '' END AS 主键, CASE WHEN col.isnullable = 1 THEN '√' ELSE '' END AS 允许空, ISNULL(comm.text, '') AS 默认值FROM dbo.syscolumns col LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype INNER JOIN dbo.sysobjects obj ON col.id = obj.id AND obj.xtype = 'U' AND obj.status >= 0 LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id AND col.colid = ep.minor_id AND ep.name = 'MS_Description' LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id AND epTwo.minor_id = 0 AND epTwo.name = 'MS_Description'WHERE obj.name = @tableName --表名ORDER BY col.colorder;END
二、循环遍历所有表
IF OBJECT_ID('er1.cursor_loop_achive_tbname', 'P') IS NOT NULL DROP PROCEDURE er1.cursor_loop_achive_tbname;GOCREATE PROCEDURE er1.cursor_loop_achive_tbnameASBEGIN SET NOCOUNT ON; DECLARE @table_name nvarchar(128), @sql nvarchar(max); -- 声明游标,并以系统表 sys.tables 作为查询对象 DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; -- 打开游标 OPEN table_cursor; -- 依次遍历查询结果,将表名输出 FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN EXEC [er1].[export_result_records] @tableName = @table_name FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor;END;
三、存储过程调用
-- 方式1USE [ER1]GODECLARE @return_value intEXEC @return_value = [er1].[export_result_records] @tableName = N'YMUS'SELECT 'Return Value' = @return_valueGO-- 方式2EXEC [er1].[export_result_records] @tableName = N'YMUS'