首页 > 解决方案 > 将所有列名收集到一个表中

问题描述

我正在从事一个项目,其目的是将sql数据库中的所有表名和列名从一种语言重命名为另一种语言。我已将所有本地表名收集到一个表 ltbl_TableNames 中,并希望将这些表的所有列添加到一个名为 ltbl_TableColumns 的表中。

我还希望每个表列都有指向其表名的链接。例如,表“Sales”有一个名为“Sum”的列。表“销售”的 ID 为“10000”。我想将该 ID 添加到名为“TableName_ID”的列中以进行链接。这可能没有很多麻烦吗?

免责声明:我正在考虑重命名过程。我只想收集链接到其父表名的列名。

提前感谢您的回答。

标签: sqlsql-server

解决方案


您可以sys.tables用于获取table name数据库中的列表。同样,column name您可以使用information_schema.columns,因为这将提供带有table name. 从以上 2 条记录中,您可以轻松获得所需的结果。

            ;WITH CTABLE AS 
        ( SELECT * FROM SYS.TABLES WHERE TYPE_DESC = 'USER_TABLE' )
        , COLUMNNAME AS 
        ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS )
        SELECT * INTO NEWTABLE FROM 
        (SELECT CTABLE.NAME AS TABLENAME , COLUMNNAME.COLUMN_NAME, COLUMNNAME.COLUMN_NAME + '_' + CAST(CTABLE.OBJECT_ID AS VARCHAR(15)) AS NEW_COLUMNNAME   
        FROM CTABLE INNER JOIN COLUMNNAME ON CTABLE.NAME = COLUMNNAME.TABLE_NAME ) AS D 

你可以试试这个以获得你的结果。


推荐阅读