如何从SQL Server数据库获取所有表的数据定义

时间:2016-11-08 21:50:58

标签: sql sql-server

SQL Server 2012和我正在使用SQL Server Management Studio 2008版本10.我可以使用以下方式从架构获取所有表的列表:

SELECT TABLE_NAME 
FROM information_schema.tables;

我可以使用:

获取有关特定表格的所有详细信息
sp_help table1;

有没有办法可以获取xls中架构中所有表的所有细节(数据定义)?像上面两个查询一样(这不是有效的SQL):

sp_help in (SELECT TABLE_NAME FROM information_schema.tables)

1 个答案:

答案 0 :(得分:1)

基本上直接从存储过程中进行一点修改。请注意,这仅显示SP的一部分。如果需要,您可能必须自己进入SP以获得更多。您只需右键单击并选择修改即可。

--SP_HELP Table1
DECLARE @dbname SYSNAME
    ,@no VARCHAR(35), @yes VARCHAR(35), @none VARCHAR(35)
SELECT @no = 'no', @yes = 'yes', @none = 'none'

DECLARE @precscaletypes NVARCHAR(150)
SELECT @precscaletypes = N'TINYINT,SMALLINT,DECIMAL,INT,BIGINT,REAL,MONEY,FLOAT,NUMERIC,SMALLMONEY,DATE,TIME,DATETIME2,DATETIMEOFFSET,'




SELECT 
        'Column_name'           = name,
        'Type'                  = TYPE_NAME(user_type_id),
        'Computed'              = CASE WHEN ColumnProperty(object_id, name, 'IsComputed') = 0 THEN @no ELSE @yes END,
        'Length'                    = CONVERT(INT, max_length),
        'Prec'                  = CASE WHEN  CHARINDEX(TYPE_NAME(system_type_id) + ',', @precscaletypes) > 0
                                    THEN CONVERT(CHAR(5),ColumnProperty(object_id, 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, 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 WHERE OBJECT_ID IN (SELECT OBJECT_ID(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES)