查找所有具有 ROWGUIDCOL 的表

Posted

技术标签:

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

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

谢谢!

【问题讨论】:

希望这个链接对***.com/questions/4849652/…有帮助 【参考方案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不是更简单吗?

以上是关于查找所有具有 ROWGUIDCOL 的表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Teradata 数据库中查找所有具有特定列名的表?

如何在 MySQL 中找到所有具有特定列名的表?

如何找到所有具有 CHAR 数据类型的列并在其中具有数值的表?

列属性:RowGUIDCol 和 Identity

rethinkdb - hasFields 查找具有多个多个缺失条件的所有文档

如何在数据库中查找具有两个列名的表