SQL Server 2008 Standard,获取包含所有列和列中可能数据的所有表

SQL Server 2008 Standard, get all tables with all columns and possible data within the colums

我目前正在处理一个具有 3k+ tables 的大型高度规范化数据库。除了一个小数据字典之外,没有任何文档可以帮助我找到正确的数据(它来自收购)。

有什么方法可以创建一个 SQL 脚本,它会给我所有 table 的所有列以及所有内容吗?结果应该与在每个 table 中单独分组每一列相同。

我希望你明白我的意思。对不起,我的英语现在有点生疏。

如果在SQL Server 2008 (Standard) 中没有办法,我会在Java 或C# 中创建一个小帮手。

提前致谢! bg 帕特里克

像这样尝试。该语句将生成一条语句,如

SELECT colABC FROM SomeTable GROUP BY colABC

每一列和 return 全部在一个 XML.

但请注意,这可能会变得很大并且可能需要几个小时。对于我的测试,我排除了一些数据类型,这些数据类型倾向于保存 ungrouped data

您肯定会遇到异常,即生成的语句有很多列。减少对合适的表格名称的输入或将查询分成几部分。

出于测试目的,有一个 TOP 100,您必须根据自己的逻辑将其删除和替换:

DECLARE @Commands TABLE(ID INT IDENTITY,cmd NVARCHAR(MAX));

WITH AllColumns AS
(
    SELECT t.TABLE_CATALOG,t.TABLE_SCHEMA,t.TABLE_NAME,c.COLUMN_NAME,c.ORDINAL_POSITION,c.DATA_TYPE
    FROM INFORMATION_SCHEMA.TABLES AS t 
    INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON c.TABLE_CATALOG=t.TABLE_CATALOG AND c.TABLE_SCHEMA=t.TABLE_SCHEMA AND c.TABLE_NAME=t.TABLE_NAME
    WHERE t.TABLE_TYPE='BASE TABLE'
)
INSERT INTO @Commands(cmd)
SELECT TOP 100 '(SELECT ' + QUOTENAME(COLUMN_NAME) + ' AS [*]'
     + ' FROM '  + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
     + ' GROUP BY ' + QUOTENAME(COLUMN_NAME)
     + ' FOR XML PATH(''x''),TYPE) AS ' + QUOTENAME(TABLE_CATALOG + '_' + TABLE_SCHEMA + '_' + TABLE_NAME + '_' + COLUMN_NAME)   
FROM AllColumns
WHERE DATA_TYPE NOT IN('image','text','uniqueidentifier','datetime','xml') AND DATA_TYPE NOT LIKE '%binary%' ;

DECLARE @finalCommand NVARCHAR(MAX)=
(
    SELECT 'SELECT '
          + STUFF(
            (
                SELECT ',' + cmd
                FROM @Commands
                ORDER BY ID
                FOR XML PATH('')
            ),1,1,''
            )
          + ' FOR XML PATH(''AllColumnsDistinct'')'
);

EXEC( @finalCommand);