sp_addextendedproperty (Transact-SQL)

Aggiunge una nuova proprietà estesa a un oggetto di database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_addextendedproperty
    [ @name = ] { 'property_name' }
    [ , [ @value = ] { 'value' } 
        [ , [ @level0type = ] { 'level0_object_type' } 
                    , [ @level0name = ] { 'level0_object_name' } 
                [ , [ @level1type = ] { 'level1_object_type' } 
                                    , [ @level1name = ] { 'level1_object_name' } 
                        [ , [ @level2type = ] { 'level2_object_type' } 
                                                    , [ @level2name = ] { 'level2_object_name' } 
                        ] 
                ]
        ] 
    ] 

Argomenti

  • [ @name ] = { 'property_name' }
    Nome della proprietà che si desidera aggiungere. property_name è di tipo sysname e non può essere NULL. I nomi possono includere inoltre stringhe vuote o di caratteri non alfanumerici, nonché valori binary.

  • [ @value= ] { 'value' }
    Valore da associare alla proprietà. value è di tipo sql_variant e il valore predefinito è NULL. La dimensione di value non può superare 7.500 byte.

  • [ @level0type= ] { 'level0_object_type' }
    Tipo di oggetto di livello 0. level0_object_type è di tipo varchar(128) e il valore predefinito è NULL.

    I possibili valori sono ASSEMBLY, CONTRACT, EVENT NOTIFICATION, FILEGROUP, MESSAGE TYPE, PARTITION FUNCTION, PARTITION SCHEME, REMOTE SERVICE BINDING, ROUTE, SCHEMA, SERVICE, USER, TRIGGER, TYPE e NULL.

    Nota importanteImportante

    I tipi USER e TYPE come tipi di livello 0 verranno rimossi in una versione futura di SQL Server. Evitare pertanto di utilizzarli in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui sono stati implementati. Utilizzare SCHEMA come tipo di livello 0 anziché USER. Per TYPE utilizzare SCHEMA come tipo di livello 0 e TYPE come tipo di livello 1.

  • [ @level0name= ] { 'level0_object_name' }
    Nome del tipo di oggetto di livello 0 specificato.level0_object_name è di tipo sysname e il valore predefinito è NULL.

  • [ @level1type = ] { 'level1_object_type' }
    Tipo di oggetto di livello 1. level1_object_type è di tipo varchar(128) e il valore predefinito è NULL. I possibili valori sono AGGREGATE, DEFAULT, FUNCTION, LOGICAL FILE NAME, PROCEDURE, QUEUE, RULE, SYNONYM, TABLE, TABLE_TYPE, TYPE, VIEW, XML SCHEMA COLLECTION e NULL.

  • [ @level1name= ] { 'level1_object_name' }
    Nome del tipo di oggetto di livello 1 specificato. level1_object_name è di tipo sysname e il valore predefinito è NULL.

  • [ @level2type= ] { 'level2_object_type' }
    Tipo di oggetto di livello 2. level2_object_type è di tipo varchar(128) e il valore predefinito è NULL. I possibili valori sono COLUMN, CONSTRAINT, EVENT NOTIFICATION, INDEX, PARAMETER, TRIGGER e NULL.

  • [ @level2name= ] { 'level2_object_name' }
    Nome del tipo di oggetto di livello 2 specificato. level2_object_name è di tipo sysname e il valore predefinito è NULL.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

Ai fini della definizione delle proprietà estese, gli oggetti inclusi in un database di SQL Server vengono classificati in base a tre livelli, ovvero 0, 1 e 2. Il livello 0 è il livello più alto e viene definito come oggetti inclusi nell'ambito del database. Gli oggetti di livello 1 sono inclusi nell'ambito di uno schema o utente, mentre gli oggetti di livello 2 sono contenuti dagli oggetti di livello 1. È possibile definire le proprietà estese per gli oggetti di qualsiasi livello.

È necessario qualificare i riferimenti a un oggetto in un livello mediante i nomi degli oggetti proprietari di livello superiore o che li contengono. Se, ad esempio, si aggiunge una proprietà estesa a una colonna di tabella (livello 2), è necessario specificare anche il nome della tabella (livello 1) che include la colonna e lo schema (livello 0) contenente la tabella.

Per l'elenco completo degli oggetti e dei relativi tipi di livello 0, 1 e 2 validi, vedere Utilizzo di proprietà estese su oggetti di database.

Se tutti i tipi e i nomi di oggetto sono Null, la proprietà appartiene al database corrente stesso.

Le proprietà estese non sono consentite negli oggetti di sistema, negli oggetti esterni all'ambito di un database definito dall'utente oppure negli oggetti non elencati come valori validi nella sezione Argomenti.

Replica delle proprietà estese

Le proprietà estese vengono replicate solo nella sincronizzazione iniziale tra server di pubblicazione e Sottoscrittore. Se si aggiungono o si modificano proprietà estese dopo la sincronizzazione iniziale, le modifiche apportate non vengono replicate. Per ulteriori informazioni sulla replica degli oggetti di database, vedere Pubblicazione di dati e oggetti di database.

Differenza tra schemi e utenti

Non è consigliabile specificare USER come tipo di livello 0 quando si applica una proprietà estesa a un oggetto di database perché ciò può causare ambiguità nella risoluzione dei nomi. Si supponga, ad esempio che l'utente Mary sia proprietaria di due schemi (Mary e MySchema) e che entrambi gli schemi includano una tabella denominata MyTable. Se Mary aggiunge una proprietà estesa alla tabella MyTable e specifica @level0type = N'USER',@level0name = Mary, non risulta chiaro a quale tabella verrà applicata la proprietà estesa. Per mantenere la compatibilità con le versioni precedenti, SQL Server applicherà la proprietà alla tabella inclusa nello schema denominato Mary. Per ulteriori informazioni su utenti e schemi, vedere Separazione tra schema e utente.

Autorizzazioni

I membri dei ruoli predefiniti del database db_owner e db_ddladmin possono aggiungere le proprietà estese a qualsiasi oggetto, anche se il ruolo db_ddladmin non può aggiungere proprietà al database stesso oppure a utenti o ruoli.

Gli utenti possono aggiungere le proprietà estese agli oggetti di cui sono proprietari oppure per i quali dispongono delle autorizzazioni ALTER o CONTROL. Per l'elenco completo delle autorizzazioni richieste, vedere Utilizzo di proprietà estese su oggetti di database.

Esempi

A. Aggiunta di una proprietà estesa a un database

Nell'esempio seguente la proprietà 'Caption' con valore 'AdventureWorks Sample OLTP Database' viene aggiunta al database di esempio AdventureWorks.

USE AdventureWorks;
GO
--Add a caption to the AdventureWorks Database object itself.
EXEC sp_addextendedproperty 
@name = N'Caption', @value = 'AdventureWorks Sample OLTP Database';

B. Aggiunta di una proprietà estesa a una colonna in una tabella

Nell'esempio seguente la proprietà Caption viene aggiunta alla colonna PostalCode nella tabella Address.

USE AdventureWorks;
GO
EXEC sp_addextendedproperty 
@name = N'Caption', @value = 'Postal code is a required column.',
@level0type = N'Schema', @level0name = Person,
@level1type = N'Table',  @level1name = Address,
@level2type = N'Column', @level2name = PostalCode;
GO

C. Aggiunta di una proprietà Input Mask a una colonna

Nell'esempio seguente viene aggiunta la proprietà Input Mask con valore '99999 or 99999-9999 or #### ###' alla colonna PostalCode della tabella Address.

USE AdventureWorks;
GO
EXEC sp_addextendedproperty 
@name = N'Input Mask ', @value = '99999 or 99999-9999 or #### ###',
@level0type = N'Schema', @level0name = Person,
@level1type = N'Table', @level1name = Address, 
@level2type = N'Column',@level2name = PostalCode;
GO

D. Aggiunta di una proprietà estesa a un filegroup

Nell'esempio seguente una proprietà estesa viene aggiunta al filegroup PRIMARY.

USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample', 
@value = N'Primary filegroup for the AdventureWorks sample database.', 
@level0type = N'FILEGROUP', @level0name = [PRIMARY];
GO