Sql-Server
sys.objects 列噸是pe_噸是p和Type奇怪的價值’ST'
我看到一個奇怪的(未記錄的)值
$$ 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_id
orparent_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;