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 binari.

  • [ @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

    In una versione futura di SQL Server non sarà più possibile specificare USER come tipo di livello 0 nella proprietà estesa di un tipo di oggetto di livello 1. In alternativa, utilizzare SCHEMA come tipo di livello 0. Ad esempio, quando si definisce una proprietà estesa in una tabella, specificare lo schema della tabella anziché un nome utente. In una versione futura di SQL Server non sarà più possibile specificare TYPE come tipo di livello 0. 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 l'utente Mary aggiunge una proprietà estesa alla tabella MyTable e specifica @level0type = N'USER', @level0name = Mary, non sarà possibile identificare con certezza la tabella a cui viene 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 proprietà estese a qualsiasi oggetto, con l'eccezione del ruolo db_ddladmin che 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 'AdventureWorks2008R2 Sample OLTP Database' viene aggiunta al database di esempio AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
--Add a caption to the AdventureWorks2008R2 Database object itself.
EXEC sp_addextendedproperty 
@name = N'Caption', 
@value = 'AdventureWorks2008R2 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 AdventureWorks2008R2;
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à Maschera di input con valore '99999 or 99999-9999 or #### ###' alla colonna PostalCode della tabella Address.

USE AdventureWorks2008R2;
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 viene aggiunta una proprietà estesa al filegroup PRIMARY.

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

E. Aggiunta di una proprietà estesa a uno schema

Nell'esempio seguente viene aggiunta una proprietà estesa allo schema HumanResources.

USE AdventureWorks2008R2;
GO
EXECUTE sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample',
@value = N'Contains objects related to employees and departments.',
@level0type = N'SCHEMA', 
@level0name = 'HumanResources';

F. Aggiunta di una proprietà estesa a una tabella

Nell'esempio seguente viene aggiunta una proprietà estesa alla tabella Address nello schema Person.

USE AdventureWorks2008R2;
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample', 
@value = N'Street address information for customers, employees, and vendors.', 
@level0type = N'SCHEMA', @level0name = 'Person',
@level1type = N'TABLE',  @level1name = 'Address';
GO

G. Aggiunta di una proprietà estesa a un ruolo

Nell'esempio seguente viene creato un ruolo applicazione al quale viene aggiunta una proprietà estesa.

USE AdventureWorks2008R2; 
GO
CREATE APPLICATION ROLE Buyers
WITH Password = '987G^bv876sPY)Y5m23'; 
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_Description', 
@value = N'Application Role for the Purchasing Department.',
@level0type = N'USER',
@level0name = 'Buyers';

H. Aggiunta di una proprietà estesa a un tipo

Nell'esempio seguente viene aggiunta una proprietà estesa a un tipo.

USE AdventureWorks2008R2; 
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_Description', 
@value = N'Data type (alias) to use for any column that represents an order number. For example a sales order number or purchase order number.', 
@level0type = N'SCHEMA', 
@level0name = N'dbo', 
@level1type = N'TYPE', 
@level1name = N'OrderNumber';

I. Aggiunta di una proprietà estesa a un utente

Nell'esempio seguente viene creato un utente al quale viene aggiunta una proprietà estesa.

USE AdventureWorks2008R2; 
GO
CREATE USER CustomApp WITHOUT LOGIN ; 
GO
EXEC sys.sp_addextendedproperty 
@name = N'MS_Description', 
@value = N'User for an application.', 
@level0type = N'USER', 
@level0name = N'CustomApp';