cột sys.objects [Loại] giá trị lạ 'ST'


8

Tôi đang thấy một giá trị lạ (không được ghi lại) cho cột [Loại] trong sys.objects. Giá trị là "ST" như được hiển thị bên dưới (lưu ý, dbo.Record là bảng người dùng)

Có ai biết giá trị 'ST' này có nghĩa là gì không? (Đây là phiên bản dành cho nhà phát triển SQL Server 2014)

nhập mô tả hình ảnh ở đây


Hấp dẫn. Câu hỏi tương tự đã được đăng lên các diễn đàn MSDN hồi tháng 5: Type = ST trong sys.objects là gì? . Và, cái đó cũng liên quan đến SQL Server 2014. Mặc dù vậy, không có câu trả lời nào :-(
Solomon Rutzky

1
Bạn có đang sử dụng bất kỳ tính năng sản phẩm tùy chọn nào có thể có liên quan không?
Martin Smith

Câu trả lời:


3

Chà, tôi không biết ST là viết tắt của từ gì, nhưng dựa trên quy ước đặt tên, tôi sẽ phải đoán nó là một dạng thống kê do hệ thống tạo ra.

Bạn có thể kiểm tra xem liệu có tình cờ, một số loại văn bản được liên kết với đối tượng nếu đó là một mô-đun, ví dụ:

SELECT OBJECT_DEFINITION(613577224);

SELECT definition FROM sys.all_sql_modules
  WHERE object_id = 613577224;

Bạn cũng có thể thử:

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

Cuối cùng, bạn có thể cố gắng vũ phu khám phá đối tượng này trong bất kỳ chế độ xem danh mục nào. Tập lệnh này cố gắng tìm bất kỳ chế độ xem nào chứa một hàng trong đó object_idcột bằng giá trị đó.

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;

Nếu điều này không mang lại kết quả gì, bạn có thể mở rộng nó để bao gồm các intcột dựa trên tất cả các chế độ xem danh mục, vì đôi khi object_idcác giá trị được lưu trữ trong các cột có tên khác nhau, như referenced_major_idhoặc parent_object_id, và bất kỳ kết quả nào ở đây cũng có thể mang lại manh mối.

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;

Cảm ơn Aaron, tôi sẽ cho một số chạy sau và báo cáo lại. Nhưng object_def định () và chọn * từ sys.all_modules trả về null hoặc không có gì. Tôi cũng mong đợi điều này có liên quan đến thống kê, theo quy ước đặt tên thống kê, WA_xxx có nghĩa là "Washington", _ST có thể có nghĩa là SEATTLE? :-)
jyao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.