Sql-Server

sys.objects 列噸是pe_噸是p和Type奇怪的價值’ST'

  • October 27, 2020

我看到一個奇怪的(未記錄的)值

$$ Type $$sys.objects 中的列。該值為“ST”,如下所示(注意,dbo.Record 是使用者表) 有誰知道這個“ST”值是什麼意思?(這是在 SQL Server 2014 開發人員版中)

在此處輸入圖像描述

好吧,我不知道 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_idor 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;

引用自:https://dba.stackexchange.com/questions/191111