【问题标题】:What are the tables whose names start with `TT_`?名称以 `TT_` 开头的表有哪些?
【发布时间】:2016-01-28 08:11:18
【问题描述】:

使用此 SQL 语句在我的数据库中查找名称包含 ItemIdall tables the have columns

SELECT o.name,
       c.name
FROM sys.columns c
INNER JOIN sys.objects o ON c.object_id = o.object_id
WHERE c.name LIKE '%ItemId%'
ORDER BY o.name, c.column_id

我收到了包含两个表格的结果:

ResourceData TT_Data_117F9D94

我知道ResourceData 表,我可以在我的表列表中找到它。

但我无法在我的数据库中找到任何表名TT_Data_117F9D94

知道这个表在我的查询结果中是在哪里/如何显示的吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    首先 你应该用过

    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME LIKE '%itemid%';
    

    可能 TT_Data_117F9D94 是您数据库中的数据表。 请检查该表的数据库设计。或者只是从该表中进行选择查询。

    【讨论】:

    • 感谢 +1 改进的 SQL 语句。它的输出比我最初使用的语句要友好得多。它还 not 列出了看起来很奇怪的 TT_ 表名。当我从 TT_Data_117F9D94 进行选择查询时,我得到“名为 TT_Data_117F9D94 的无效对象”。这让我回到了最初的问题:为什么那个 SQL 语句会产生一个不存在的表?
    • 简单总是更好
    【解决方案2】:

    检查表类型 -

    CREATE TYPE dbo.TT_Type AS TABLE (a INT)
    
    SELECT o.name, c.name
    FROM sys.columns c
    JOIN sys.objects o ON c.[object_id] = o.[object_id]
    WHERE c.name = 'a'
    

    正确的查询 -

    SELECT SCHEMA_NAME(o.[schema_id]), o.name, c.name
    FROM sys.columns c
    JOIN sys.objects o ON c.[object_id] = o.[object_id]
    WHERE o.[type] = 'U' -- only user tables
    

    【讨论】:

    • @datps 只需为sys.objects 添加过滤器或从sys.tables 中选择表对象
    • 确实,看起来 TT 代表sys.objects page 中描述的表类型。您是说这张表是在我的语句运行的整个生命周期内即时创建的吗?
    • @datps 表类型是一个存储在sys.table_types (TT_Type) 中的对象,也作为sys.objects (TT_TT_Type_5A6F5FCC) 中系统名称的引用存在
    • 谢谢。我现在可以在 Databases > System Databases > Views > System Views 中看到 sys.table_types。在 SQL 语句中,它将被指定为 SELECT * FROM [master].[sys].[table_types]。有趣的。我刚刚开始了解 MS SQL Server 的细节。
    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 2021-02-03
    • 2017-09-19
    • 1970-01-01
    • 2010-09-05
    • 2014-11-02
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多