显示 sys.time_zone_info 表定义的 T-SQL 查询

WXJ*_*163 2 sql-server t-sql system-tables

以下查询可用于显示自定义表的定义。

SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
       , IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'PostHistory' 
Run Code Online (Sandbox Code Playgroud)

不适用于 sys 表

SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
       , IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'sys.time_zone_info'
Run Code Online (Sandbox Code Playgroud)

我猜这些信息在另一个数据库的另一个表中,它们是什么?

我也尝试过sp_help 'sys.time_zone_info',并且得到了

对对象“sp_help”、数据库“mssqlsystemresource”、架构“sys”的 EXECUTE 权限被拒绝。

Pau*_*ite 5

sys.time_zone_info是一个系统视图,其定义为:

CREATE VIEW sys.time_zone_info AS
    SELECT  name,
            current_utc_offset,
            is_currently_dst
    FROM OPENROWSET(TABLE TIME_ZONE_INFO, SYSUTCDATETIME())
Run Code Online (Sandbox Code Playgroud)

OPENROWSET调用是内部结构的包装。您无法直接获取有关它的信息。

视图返回的列显示在文档中

CREATE VIEW sys.time_zone_info AS
    SELECT  name,
            current_utc_offset,
            is_currently_dst
    FROM OPENROWSET(TABLE TIME_ZONE_INFO, SYSUTCDATETIME())
Run Code Online (Sandbox Code Playgroud)

以及来自nchar 和 nvarchar (Transact-SQL)

sysname是系统提供的用户定义数据类型,其功能与nvarchar(128)等效,只是它不可为 null。sysname用于引用数据库对象名称。

您还可以从系统目录视图中获取所需的信息,例如:

SELECT
    AC.column_id,
    AC.[name],
    data_type = T.[name],
    AC.max_length,
    AC.[precision],
    AC.scale,
    AC.collation_name,
    AC.is_nullable
FROM sys.all_objects AS AO
JOIN sys.all_columns AS AC
    ON AC.[object_id] = AO.[object_id]
JOIN sys.types AS T
    ON T.user_type_id = AC.user_type_id
WHERE
    AO.[object_id] = OBJECT_ID(N'sys.time_zone_info');
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示