【问题标题】:Find all tables that have ROWGUIDCOL查找所有具有 ROWGUIDCOL 的表
【发布时间】:2016-04-21 08:33:19
【问题描述】:

是否有我可以加入的系统表,以便我可以查询以查找列标记为 ROWGUIDCOL 的所有表?

谢谢!

【问题讨论】:

标签: sql sql-server


【解决方案1】:

你可以像这样使用COLUMNPROPERTY()

SELECT COLUMNPROPERTY(OBJECT_ID(C.TABLE_NAME), c.COLUMN_NAME, 'IsRowGuidCol') AS IsRowGuidCol 

, * FROM INFORMATION_SCHEMA.COLUMNS 作为 C WHERE COLUMNPROPERTY(OBJECT_ID(C.TABLE_NAME), c.COLUMN_NAME, 'IsRowGuidCol') = 1

【讨论】:

    【解决方案2】:

    您可以使用此 sql 查询来实现您的目标。 Objects.Type = 'U' 是用户表。

    SELECT O.name AS table_name,
           C.name AS column_name
    FROM sys.objects AS O
        JOIN sys.columns AS C ON C.object_id = O.object_id
    WHERE o.type = 'U'
            AND C.is_rowguidcol = 1
    

    【讨论】:

    • 仅仅因为它是唯一标识符,它可能不是rowguidcol。
    【解决方案3】:

    您可以将sys.columnsCOLUMNPROPERTY 一起使用:

    SELECT DISTINCT OBJECT_NAME(object_id) AS tab_name
    FROM sys.columns
    WHERE COLUMNPROPERTY(object_id, name, 'IsRowGuidCol') = 1
    

    SqlFiddleDemo


    CREATE TABLE MyTable(ID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID());
    CREATE TABLE MyTable2(ID UNIQUEIDENTIFIER ROWGUIDCOL PRIMARY KEY 
                          DEFAULT NEWSEQUENTIALID());
    

    输出:

    ╔══════════╗
    ║ tab_name ║
    ╠══════════╣
    ║ MyTable2 ║
    ╚══════════╝
    

    【讨论】:

    • 为什么使用COLUMNPROPERTY?做FROM sys.columns where is_rowguidcol = 1不是更简单吗?
    猜你喜欢
    • 2015-04-18
    • 2018-06-24
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2010-09-07
    相关资源
    最近更新 更多