sys.objects列[タイプ]奇妙な値 'ST'


9

sys.objectsの[Type]列に奇妙な(文書化されていない)値が表示されます。以下に示すように、値は「ST」です(注、dbo.Recordはユーザーテーブルです)。

この「ST」値の意味を誰かが知っていますか?(これはSQL Server 2014 Developer Editionにあります)

ここに画像の説明を入力してください


面白い。同様の質問が5月にMSDNフォーラムに投稿されました:sys.objectsのType = STとは何ですか?。そして、それはSQL Server 2014にも関連しています。ただし、答えはありません:-(
Solomon Rutzky 2017年

1
関連する可能性のあるオプションの製品機能を使用していますか?
マーティンスミス

SQL Server 2017でもこの問題に遭遇しました。サーバー上のすべてのDBに対してチェックを実行したところ、数百ものデータベースがありました。
user3593990

回答:


3

まあ、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;

これで何も得られない場合はintobject_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;

アーロンに感謝します。後で実行してレポートを返します。しかし、object_definition()およびselect * from sys.all_modulesは、nullまたは何も返しません。統計の命名規則によると、これは統計と関係があると思います。WA_xxxは「ワシントン」を意味し、_STシアトルを意味する可能性がありますか?:-)
jyao 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.