sys.objects (Transact-SQL)

Contiene una riga per ogni oggetto con ambito schema definito dall'utente creato in un database.

Nota

sys.objects non visualizza trigger DDL. Questi oggetti, infatti, non sono definiti a livello di ambito di schema. Tutti i trigger, sia DML che DDL, sono disponibili in sys.triggers. sys.triggers supporta una combinazione di regole per l'ambito dei nomi per i diversi tipi di trigger.

Nome colonna

Tipo di dati

Descrizione

name

sysname

Nome dell'oggetto.

object_id

int

Numero di identificazione dell'oggetto. Valore univoco all'interno di un database.

principal_id

int

ID del singolo proprietario, se diverso dal proprietario dello schema. Per impostazione predefinita, gli oggetti contenuti nello schema appartengono al proprietario dello schema stesso. È tuttavia possibile specificare un altro proprietario modificando la proprietà mediante l'istruzione ALTER AUTHORIZATION.

È NULL se non esiste un singolo proprietario alternativo.

È NULL se il tipo di oggetto è uno dei seguenti:

C = vincolo CHECK

D = DEFAULT (vincolo o valore autonomo)

F = vincolo FOREIGN KEY

PK = vincolo PRIMARY KEY

R = regola (tipo obsoleto, autonoma)

TA = trigger di assembly (integrazione con CLR)

TR = trigger SQL

UQ = vincolo UNIQUE

schema_id

int

ID dello schema che contiene l'oggetto.

Gli oggetti di sistema con ambito costituito dallo schema sono sempre inclusi negli schemi sys o INFORMATION_SCHEMA.

parent_object_id

int

ID dell'oggetto a cui appartiene l'oggetto.

0 = non è un oggetto figlio.

type

char(2)

Tipo di oggetto:

AF = funzione di aggregazione (CLR)

C = vincolo CHECK

D = DEFAULT (vincolo o valore autonomo)

F = vincolo FOREIGN KEY

FN = funzione scalare SQL

FS = Funzione scalare di assembly (CLR)

FT = funzione valutata a livello di tabella assembly (CLR)

IF = funzione SQL inline valutata a livello di tabella

IT = tabella interna

P = Stored procedure SQL

PC = Stored procedure di assembly (CLR)

PG = Guida di piano

PK = vincolo PRIMARY KEY

R = regola (tipo obsoleto, autonoma)

RF = procedura-filtro-replica

S = tabella di base di sistema

SN = sinonimo

SQ = coda di servizio

TA = trigger DML assembly (CLR)

TF = funzione valutata a livello di tabella SQL

TR = trigger DML SQL

TT = tipo tabella

U = tabella (definita dall'utente)

UQ = vincolo UNIQUE

V = vista

X = stored procedure estesa

type_desc

nvarchar(60)

Descrizione del tipo di oggetto:

AGGREGATE_FUNCTION

CHECK_CONSTRAINT

DEFAULT_CONSTRAINT

FOREIGN_KEY_CONSTRAINT

SQL_SCALAR_FUNCTION

CLR_SCALAR_FUNCTION

CLR_TABLE_VALUED_FUNCTION

SQL_INLINE_TABLE_VALUED_FUNCTION

INTERNAL_TABLE

SQL_STORED_PROCEDURE

CLR_STORED_PROCEDURE

PLAN_GUIDE

PRIMARY_KEY_CONSTRAINT

RULE

REPLICATION_FILTER_PROCEDURE

SYSTEM_TABLE

SYNONYM

SERVICE_QUEUE

CLR_TRIGGER

SQL_TABLE_VALUED_FUNCTION

SQL_TRIGGER

TABLE_TYPE

USER_TABLE

UNIQUE_CONSTRAINT

VIEW

EXTENDED_STORED_PROCEDURE

create_date

datetime

Data di creazione dell'oggetto.

modify_date

datetime

Data dell'ultima modifica dell'oggetto mediante un'istruzione ALTER. Se l'oggetto è una tabella o una vista, modify_date viene modificata anche quando si crea o si modifica un indice cluster nella tabella o nella vista.

is_ms_shipped

bit

Oggetto creato da un componente di SQL Server interno.

is_published

bit

Oggetto pubblicato.

is_schema_published

bit

Viene pubblicato solo lo schema dell'oggetto.

Osservazioni

È possibile applicare le funzioni predefinite OBJECT_ID, OBJECT_NAME e OBJECTPROPERTY() agli oggetti visualizzati in sys.objects.

Una versione di questa vista, denominata sys.system_objects, con lo stesso schema, consente di visualizzare oggetti di sistema. È inoltre disponibile un'altra vista, denominata sys.all_objects, che consente di visualizzare oggetti utente e di sistema. Le tre viste del catalogo hanno tutte la stessa struttura.

In questa versione di SQL Server un indice esteso, ad esempio un indice XML o un indice spaziale, è considerato una tabella interna in sys.objects (type = IT e type_desc = INTERNAL_TABLE). Per un indice esteso:

  • name è il nome interno della tabella dell'indice.

  • parent_object_id corrisponde a object_id della tabella di base.

  • Le colonne is_ms_shipped, is_published e is_schema_published sono impostate su 0.

Autorizzazioni

In SQL Server 2005 e versioni successive la visibilità dei metadati nelle viste del catalogo è limitata alle entità a protezione diretta di cui l'utente è proprietario o per cui dispone di autorizzazioni. Per ulteriori informazioni, vedere Configurazione della visibilità dei metadati.

Esempi

A. Individuazione di tutti gli oggetti modificati negli ultimi N giorni

Prima di eseguire la query seguente, sostituire <database_name> e <n_days> con valori validi.

USE <database_name>;
GO
SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - <n_days>
ORDER BY modify_date;
GO

B. Individuazione dei parametri per una stored procedure o una funzione specifica

Prima di eseguire la query seguente, sostituire <database_name> e <schema_name.object_name> con nomi validi.

USE <database_name>;
GO
SELECT SCHEMA_NAME(schema_id) AS schema_name
    ,o.name AS object_name
    ,o.type_desc
    ,p.parameter_id
    ,p.name AS parameter_name
    ,TYPE_NAME(p.user_type_id) AS parameter_type
    ,p.max_length
    ,p.precision
    ,p.scale
    ,p.is_output
FROM sys.objects AS o
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
ORDER BY schema_name, object_name, p.parameter_id;
GO

C. Individuazione di tutte le funzioni definite dall'utente in un database

Prima di eseguire la query seguente, sostituire <database_name> con un nome di database valido.

USE <database_name>;
GO
SELECT name AS function_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
GO

D. Individuazione del proprietario di ogni oggetto in uno schema.

Prima di eseguire la query seguente, sostituire tutte le occorrenze di <database_name> e <schema_name> con nomi validi.

USE <database_name>;
GO
SELECT 'OBJECT' AS entity_type
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
    ,name 
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION 
SELECT 'TYPE' AS entity_type
    ,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
    ,name 
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>' 
UNION
SELECT 'XML SCHEMA COLLECTION' AS entity_type 
    ,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
    ,xsc.name 
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
    ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO