这可能是错误的地方,但我正在尝试从SQL数据源获取数据,将其放入Excel,并从上述SQL数据源自动生成数据字典。有没有人这样做或知道如何做到这一点?
[编辑]
我需要的是所有表名,以及每个表中的所有列(每个表都是它自己的excel选项卡),对于每一列,我需要数据类型以及它是否可为空< / p>
答案 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