columna sys.objects [Tipo] valor extraño 'ST'

9

Veo un valor extraño (no documentado) para la columna [Tipo] en sys.objects. El valor es "ST" como se muestra a continuación (nota, dbo.Record es una tabla de usuario)

¿Alguien sabe lo que significa este valor 'ST'? (Esto está en SQL Server 2014 Developer Edition)

ingrese la descripción de la imagen aquí

jyao
fuente
Interesante. Una pregunta similar se publicó en los foros de MSDN en mayo: ¿Qué es Type = ST en sys.objects? . Y, ese también se relaciona con SQL Server 2014. Sin embargo, no hay respuesta :-(
Solomon Rutzky
1
¿Está utilizando alguna característica opcional del producto que pueda ser relevante?
Martin Smith
Me he encontrado con este tiempo también, en SQL Server 2017. Cuando ejecuté una verificación en todos los DB en los servidores, había cientos de ellos.
user3593990

Respuestas:

3

Bueno, no sé qué significa ST, pero según la convención de nomenclatura, tendría que adivinar que es algún tipo de estadística generada por el sistema.

Puede verificar si hay algún tipo de texto asociado con el objeto si es un módulo, por ejemplo:

SELECT OBJECT_DEFINITION(613577224);

SELECT definition FROM sys.all_sql_modules
  WHERE object_id = 613577224;

También puedes probar:

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

Finalmente, podría intentar descubrir por la fuerza bruta este objeto en cualquiera de las vistas de catálogo. Este script intenta encontrar cualquier vista que contenga una fila donde la object_idcolumna sea igual a ese 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;

Si esto no produce nada, puede expandirlo para incluir intcolumnas basadas en todas las vistas de catálogo, ya que a veces los object_idvalores se almacenan en columnas con diferentes nombres, como referenced_major_ido parent_object_id, y cualquier resultado aquí también puede dar 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;
Aaron Bertrand
fuente
Gracias Aaron, daré una vuelta más tarde e informaré. Pero object_definition () y select * from sys.all_modules devuelven nulo o nada. También espero que esto tenga algo que ver con las estadísticas, según la convención de nomenclatura de estadísticas, WA_xxx significa "Washington", _ST puede significar SEATTLE? :-)
jyao