AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 191111
Accepted
jyao
jyao
Asked: 2017-11-17 15:24:20 +0800 CST2017-11-17 15:24:20 +0800 CST 2017-11-17 15:24:20 +0800 CST

sys.objects 列 [Type] 奇怪的值 'ST'

  • 772

我在 sys.objects 中看到 [Type] 列有一个奇怪的(未记录的)值。值为“ST”如下图(注意,dbo.Record是用户表)

有谁知道这个“ST”值是什么意思?(这是在 SQL Server 2014 开发版中)

在此处输入图像描述

sql-server sql-server-2014
  • 2 2 个回答
  • 680 Views

2 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2017-11-17T22:10:11+08:002017-11-17T22:10:11+08:00

    好吧,我不知道 ST 代表什么,但根据命名约定,我不得不猜测它是某种系统生成的统计数据。

    如果它是一个模块,您可以检查是否有某种文本与对象关联,例如:

    SELECT OBJECT_DEFINITION(613577224);
    
    SELECT definition FROM sys.all_sql_modules
      WHERE object_id = 613577224;
    

    您也可以尝试:

    EXEC sp_help N'dbo._ST_OEA33...';
    

    最后,您可以尝试暴力破解任何目录视图中的这个对象。此脚本尝试查找包含object_id列等于该值的行的任何视图。

    CREATE TABLE #v(v sysname);
    
    DECLARE @sql nvarchar(max) = N'', @obj int = 613577224;
    
    SELECT @sql += N'INSERT #v 
        SELECT DISTINCT ''sys.' + name + N''' 
          FROM sys.' + QUOTENAME(name) + N' 
          WHERE [object_id] = @obj;'
      FROM sys.all_views AS v
      WHERE EXISTS 
      (
        SELECT 1 
          FROM sys.all_columns AS c
          WHERE c.name = N'object_id' 
          AND c.[object_id] = v.[object_id]
      ); 
    
    EXEC sys.sp_executesql @sql, N'@obj int', @obj;
    
    SELECT v FROM #v;
    
    DROP TABLE #v;
    

    如果这没有产生任何结果,您可以扩展它以包括所有int目录视图中基于 all 的列,因为有时object_id值存储在具有不同名称的列中,例如referenced_major_id或parent_object_id,并且此处的任何结果也可能会产生线索。

    SET NOCOUNT ON;
    
    CREATE TABLE #v(v sysname);
    
    DECLARE @sql nvarchar(max) = N'', @obj int = 613577224;
    
    SELECT @sql += N'INSERT #v 
        SELECT DISTINCT ''sys.' + v.name + N''' 
          FROM sys.' + QUOTENAME(v.name) + N' 
          WHERE ' + QUOTENAME(c.name) + N' = @obj;'
      FROM sys.all_views AS v
      INNER JOIN sys.all_columns AS c
      ON v.[object_id] = c.[object_id]
      WHERE v.[schema_id] = 4
        AND c.[system_type_id] IN (56,127)
        AND v.name NOT IN (N'syscolumns')
        AND v.name NOT LIKE N'dm_fts_%'; 
    
    EXEC sys.sp_executesql @sql, N'@obj int', @obj;
    
    SELECT v FROM #v;
    
    GO
    DROP TABLE #v;
    
    • 4
  2. Mark Timson
    2020-10-28T04:39:55+08:002020-10-28T04:39:55+08:00

    ST 对象是数据库表使用统计信息。我昨天遇到的情况是我们需要完全删除Azure SQL 托管实例上的架构。在尝试删除模式时,我们无法做到这一点,并得到了一些像 ST__xxxxxx___Chinesechars 这样的长错误......原因是现在删除的表不再属于模式,它们的统计信息仍然存在于托管实例 sys 表。

    你有两个选择。在删除表之前尝试删除统计信息:

    DROP STATISTICS [Database].[Schema].[Table];
    

    或者将统计信息移动到另一个模式。不是最好的,但是在删除模式时会让你绕过错误。

    ALTER SCHEMA [SchemaToMoveTo] TRANSFER OBJECT::[SchemaFrom].[ST__xxxxxx___Chinesechars]
    

    似乎是 SQL 托管实例中的错误。

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve