Excel - 将数据源转换为数据字典

时间:2011-07-21 19:33:04

标签: sql-server excel

这可能是错误的地方,但我正在尝试从SQL数据源获取数据,将其放入Excel,并从上述SQL数据源自动生成数据字典。有没有人这样做或知道如何做到这一点?

[编辑]

我需要的是所有表名,以及每个表中的所有列(每个表都是它自己的excel选项卡),对于每一列,我需要数据类型以及它是否可为空< / p>

3 个答案:

答案 0 :(得分:1)

假设您指的是包含列元数据的数据库中列的列表,这是一次性需求,并且不需要太多自动化方式。

我会在SSMS中执行以下内容

SELECT Table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'


DECLARE @tableName sysname
DECLARE table_cursor CURSOR FAST_FORWARD  FOR 
SELECT Table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

OPEN table_cursor

FETCH NEXT FROM table_cursor 
INTO @tableName

WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT TABLE_NAME,
            COLUMN_NAME,
            Data_type + COALESCE('(' + Cast(Character_Maximum_length as varchar) + ')' ,'') DataType, 
            IS_NULLABLE

    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE
    TABLE_NAME = @tableName



    FETCH NEXT FROM table_cursor 
    INTO @tableName
END
CLOSE table_cursor
DEALLOCATE table_cursor

这将输出多个结果集,第一个是表名,然后每个人都是你提到的列数据。

如果您愿意,可以摆脱光标并只有两个输出,但我发现在每个网格上按 Ctrl + A Ctrl + C 更容易

答案 1 :(得分:0)

Conrad肯定是在正确的轨道上,但如果您需要列信息,您可能需要使用information_schema.columns而不是information_schema.tables。 information_schema.columns将为您提供数据类型,无论它是否可为空,列是否为表,以及数据库中所有表的更多数据。

如果您需要按表分解,以便将它放在每个表中,我将使用循环从information_schema.columns为每个表获取单独的结果集。

答案 2 :(得分:0)

我试过这种方式,我得到了我需要的东西。

SELECT T.NAME 'TABLE',C.NAME 'COLUMN' ,S.NAME 'DATATYPE',C.is_nullable 'ISNULL'
FROM SYS.TABLES T INNER  JOIN SYS.COLUMNS C ON T.OBJECT_ID=C.OBJECT_ID 
INNER JOIN SYS.TYPES S ON C.SYSTEM_TYPE_ID=S.SYSTEM_TYPE_ID
WHERE T.TYPE='U' 
ORDER BY T.NAME,C.NAME