coluna sys.objects [Tipo] valor estranho 'ST'


9

Estou vendo um valor estranho (não documentado) para a coluna [Type] em sys.objects. O valor é "ST", conforme mostrado abaixo (observe: dbo.Record é uma tabela do usuário)

Alguém sabe o que esse valor 'ST' significa? (Isso está no SQL Server 2014 Developer Edition)

insira a descrição da imagem aqui


Interessante. Pergunta semelhante foi postada nos fóruns do MSDN em maio: O que é o Type = ST no sys.objects? . E isso também está relacionado ao SQL Server 2014. Porém, não há resposta :-(
— Solomon Rutzky 17/17/17

11
Você está usando algum recurso opcional do produto que possa ser relevante?
— Martin Smith

Também encontrei esse tyoe no SQL Server 2017. Quando executei uma verificação em todos os bancos de dados nos servidores, havia centenas deles.
— user3593990

Respostas:


3

Bem, eu não sei o que ST significa, mas com base na convenção de nomenclatura eu teria que adivinhar que é algum tipo de estatística gerada pelo sistema.

Você pode verificar se há, por acaso, algum tipo de texto associado ao objeto, se for um módulo, por exemplo:

SELECT OBJECT_DEFINITION(613577224);

SELECT definition FROM sys.all_sql_modules
  WHERE object_id = 613577224;

Você também pode tentar:

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

Por fim, você pode tentar com força bruta descobrir esse objeto em qualquer uma das visualizações de catálogo. Este script tenta encontrar qualquer exibição que contenha uma linha em que a object_idcoluna seja igual a esse valor.

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;

Se isso não resultar em nada, você poderá expandi-lo para incluir intcolunas com base em todas as visualizações de catálogo, pois algumas vezes os object_idvalores são armazenados em colunas com nomes diferentes, como referenced_major_idou parent_object_id, e qualquer resultado aqui também pode fornecer pistas.

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;

Obrigado Aaron, vou dar uma corrida mais tarde e relatar de volta. Mas object_definition () e selecione * de sys.all_modules retornam nulo ou nada. Eu também espero que isso tenha algo a ver com estatísticas, de acordo com a convenção de nomenclatura estatística, WA_xxx significa "Washington", _ST pode significar SEATTLE? :-)
— jyao 17/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.