sys.objects kolom [Jenis] nilai aneh 'ST'

9

Saya melihat nilai aneh (tidak terdokumentasi) untuk kolom [Type] di sys.objects. Nilainya "ST" seperti yang ditunjukkan di bawah ini (catatan, dbo.Record adalah tabel pengguna)

Adakah yang tahu apa arti nilai 'ST' ini? (Ini dalam Edisi Pengembang SQL Server 2014)

masukkan deskripsi gambar di sini

jyao
sumber
Menarik. Pertanyaan serupa telah diposting ke forum MSDN pada bulan Mei: Apa itu Type = ST di sys.objects? . Dan, yang satu juga berhubungan dengan SQL Server 2014. Tidak ada jawaban di sana, meskipun :-(
Solomon Rutzky
1
Apakah Anda menggunakan fitur produk opsional yang mungkin relevan?
Martin Smith
Saya telah mengalami ini juga, di SQL Server 2017. Ketika saya menjalankan cek di semua DB di server, ada ratusan dari mereka.
user3593990

Jawaban:

3

Yah, saya tidak tahu apa kepanjangan dari ST, tetapi berdasarkan konvensi penamaan saya harus menebak itu semacam statistik yang dihasilkan sistem.

Anda dapat memeriksa untuk melihat apakah ada, semacam teks yang terkait dengan objek jika itu adalah modul, misalnya:

SELECT OBJECT_DEFINITION(613577224);

SELECT definition FROM sys.all_sql_modules
  WHERE object_id = 613577224;

Anda juga dapat mencoba:

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

Akhirnya, Anda dapat mencoba secara paksa menemukan objek ini di salah satu tampilan katalog. Skrip ini mencoba menemukan tampilan yang berisi baris di mana object_idkolom sama dengan nilai itu.

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;

Jika ini tidak menghasilkan apa-apa, Anda dapat mengembangkannya untuk menyertakan semua intkolom berbasis di semua tampilan katalog, karena kadang-kadang object_idnilai disimpan dalam kolom dengan nama yang berbeda, seperti referenced_major_idatau parent_object_id, dan hasil apa pun di sini mungkin menghasilkan petunjuk juga.

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;
Aaron Bertrand
sumber
Terima kasih Aaron, saya akan memberikan beberapa waktu kemudian dan melaporkan kembali. Tapi object_definition () dan pilih * dari sys.all_modules mengembalikan null atau tidak sama sekali. Saya juga berharap ini ada hubungannya dengan statistik, menurut konvensi penamaan statistik, WA_xxx berarti "Washington", _ST dapat berarti SEATTLE? :-)
jyao