Utilizzo di proprietà estese su oggetti di database
Le proprietà estese consentono di aggiungere testo, ad esempio istruzioni o descrizioni, nonché maschere di input e regole di formattazione sotto forma di proprietà di oggetti inclusi in un database o del database stesso. È ad esempio possibile aggiungere una proprietà estesa a uno schema, alla vista di uno schema o a una colonna della vista. Poiché le proprietà estese vengono archiviate nel database, tutte le applicazioni che leggono le proprietà possono valutare l'oggetto nello stesso modo. In tal modo i dati verranno gestiti in modo più consistente in tutti i programmi del sistema.
È possibile utilizzare le proprietà estese per le operazioni seguenti:
Specifica di una didascalia per una tabella, una vista o una colonna. Le applicazioni potranno quindi utilizzare la stessa didascalia in un'interfaccia utente che visualizza informazioni di tale tabella, vista o colonna.
Specifica di una maschera di input per una colonna per consentire la convalida dei dati nelle applicazioni prima dell'esecuzione di un'istruzione Transact-SQL. È ad esempio possibile utilizzare la proprietà estesa per specificare il formato richiesto per una colonna relativa al codice di avviamento o al numero di telefono.
Specifica delle regole di formattazione per la visualizzazione dei dati in una colonna.
Registrazione di una descrizione di oggetti di database specifici visualizzati dalle applicazioni. È ad esempio possibile utilizzare le descrizioni in un report o in un'applicazione del dizionario dati.
Specifica delle dimensioni e della posizione in cui una colonna deve essere visualizzata nella finestra.
[!NOTA]
Non utilizzare le proprietà estese per nascondere informazioni riservate su un oggetto. Le proprietà estese di un oggetto possono infatti essere visualizzate da tutti gli utenti che dispongono dell'autorizzazione per l'oggetto. Un utente che dispone, ad esempio, dell'autorizzazione SELECT per una tabella potrà visualizzare le proprietà estese di tale tabella.
Definizione delle proprietà estese
Ogni proprietà estesa dispone di un nome e di un valore definiti dall'utente. Il valore di una proprietà estesa è di tipo sql_variant e può contenere fino a 7.500 byte di dati. È possibile aggiungere più proprietà estese a un unico oggetto.
Per consentire la specifica delle proprietà estese, gli oggetti inclusi in un database SQL Server sono classificati in tre livelli, ovvero 0, 1 e 2. Il livello 0 rappresenta quello più elevato e viene utilizzato per gli oggetti contenuti nell'ambito del database. Gli oggetti del livello 1 sono contenuti in un ambito utente o dello schema, mentre quelli di livello 2 in oggetti di livello 1. È possibile definire le proprietà estese per oggetti di un qualsiasi livello.
Per i riferimenti a un oggetto di un livello è necessario specificare i nomi degli oggetti di livello superiore che li posseggono o li contengono. Quando, ad esempio, si aggiunge una proprietà estesa a una colonna di tabella di livello 2, è necessario specificare anche il nome della tabella di livello 1 che contiene la colonna e lo schema di livello 0 che contiene la tabella.
Nell'esempio seguente il valore della proprietà estesa 'Minimum inventory quantity.' viene aggiunto alla colonna SafetyStockLevel nella tabella Product contenuta nello schema Production .
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Minimum inventory quantity.',
@level0type = N'SCHEMA', @level0name = Production,
@level1type = N'TABLE', @level1name = Product,
@level2type = N'COLUMN', @level2name = SafetyStockLevel;
GO
Aggiunta di proprietà estese a oggetti
Nelle tabelle seguenti sono elencati gli oggetti ai quali è possibile aggiungere proprietà estese. Oltre ai tipi validi di oggetti di livello 0, 1 e 2, sono indicate anche le autorizzazioni necessarie per aggiungere, eliminare o visualizzare le proprietà estese.
Funzione di aggregazione
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
AGGREGATE |
ALTER per OBJECT funzione di aggregazione |
Qualsiasi per OBJECT |
Si applica a funzioni di aggregazione CLR definite dall'utente. |
Chiave asimmetrica
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
ASYMMETRIC KEY |
ALTER in CERTIFICATE |
Una qualsiasi in KEY |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Assembly
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
ASSEMBLY |
ALTER per ASSEMBLY |
Qualsiasi per ASSEMBLY |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Certificato
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
CERTIFICATE |
ALTER in CERTIFICATE |
Una qualsiasi in CERTIFICATE |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Contratto (Service Broker)
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
CONTRACT |
ALTER per CONTRACT |
Qualsiasi per CONTRACT |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Database
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
Nessuno |
ALTER per DATABASE |
CONTROL per DATABASE oppure TAKE OWNERSHIP per DATABASE oppure VIEW DEFINITION per DATABASE oppure ALTER ANY DATABASE per SERVER oppure CREATE DATABASE per SERVER |
La proprietà si applica al database stesso. |
1 |
Nessuno |
|
|
|
2 |
Nessuno |
|
|
|
Esempio
Nell'esempio seguente una proprietà estesa viene aggiunta al database di esempio AdventureWorks .
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'AdventureWorks Sample OLTP Database';
GO
Valore predefinito
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
|
1 |
DEFAULT |
ALTER per SCHEMA |
HAS_DBACCESS = 1 |
Disponibile solo per garantire la compatibilità con le versioni precedenti. Per ulteriori informazioni, vedere Funzionalità del Motore di database obsolete in SQL Server 2008. |
2 |
Nessuno |
|
|
|
Notifica degli eventi
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
EVENT NOTIFICATION |
ALTER ANY DATABASE EVENT NOTIFICATION ON DATABASE |
Proprietario della notifica degli eventi oppure CONTROL, ALTER, TAKE OWNERSHIP o VIEW DEFINITION per il database oppure ALTER ANY DATABASE EVENT NOTIFICATION |
Si applica alle notifiche degli eventi a livello di database interessate dal database. Non è possibile aggiungere proprietà estese a notifiche degli eventi a livello del server. |
1 |
Nessuno |
|
|
|
2 |
Nessuno |
|
|
|
Filegroup o nome di file
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
FILEGROUP |
ALTER per DATABASE |
HAS_DBACCESS = 1 |
1 |
LOGICAL FILE NAME |
ALTER per DATABASE |
HAS_DBACCESS = 1 |
2 |
Nessuno |
|
|
Esempio
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
Nell'esempio seguente una proprietà estesa viene aggiunta al nome di file logico AdventureWorks_Data nel filegroup PRIMARY.
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Primary data file for the AdventureWorks sample database.',
@level0type = N'FILEGROUP', @level0name = [PRIMARY],
@level1type = N'Logical File Name', @level1name = AdventureWorks_Data;
GO
Funzione
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
FUNCTION |
ALTER per OBJECT funzione |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
Si applica alle funzioni definite dall'utente riportate di seguito:
Se non viene specificato un tipo di livello 2, la proprietà si applica alla funzione stessa. |
2 |
COLUMN |
ALTER per OBJECT funzione |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
|
2 |
CONSTRAINT |
ALTER per OBJECT funzione |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
|
2 |
PARAMETER |
ALTER per OBJECT funzione |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
|
Esempio
Nell'esempio seguente una proprietà estesa viene aggiunta alla funzione definita dall'utente ufnGetStock.
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Scalar function returning the quantity of inventory for a specified ProductID.',
@level0type = N'SCHEMA', @level0name = [dbo],
@level1type = N'FUNCTION', @level1name = ufnGetStock;
GO
Nell'esempio seguente una proprietà estesa viene aggiunta al parametro @ProductID specificato nella funzione definita dall'utente ufnGetStock.
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Input parameter. Enter a valid ProductID.',
@level0type = N'SCHEMA', @level0name = [dbo],
@level1type = N'FUNCTION', @level1name = ufnGetStock,
@level2type = N'PARAMETER', @level2name ='@ProductID';
GO
Tipo di messaggio
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
MESSAGE TYPE |
ALTER per MESSAGE TYPE |
HAS_DBACCESS = 1 |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Funzione di partizione
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
PARTITION FUNCTION |
ALTER ANY DATASPACE per DATABASE |
HAS_DBACCESS = 1 |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Schema di partizione
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
PARTITION SCHEME |
ALTER ANY DATASPACE per DATABASE |
HAS_DBACCESS = 1 |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Guida di piano
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
PLAN GUIDE |
ALTER ANY DATASPACE per DATABASE |
VIEW DEFINITION, ALTER, TAKE OWNERSHIP o CONTROL in Database per SQL o guide TEMPLATE e VIEW DEFINITION, ALTER, TAKE OWNERSHIP o CONTROL nell'oggetto delle guide di OBJECT |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Nel seguente esempio viene aggiunta una proprietà estesa viene aggiunta alla guida di piano TemplateGuide1.
USE AdventureWorks;
GO
EXECUTE sp_addextendedproperty @name=N'PlanGuideGroup', @value = N'MyTest',
@level0type = N'Plan Guide', @level0name = 'TemplateGuide1';
Procedura
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
PROCEDURE |
ALTER per OBJECT procedura
Nota
Solo i membri del ruolo predefinito del server sysadmin possono aggiungere proprietà estese alle stored procedure estese.
|
Qualsiasi per OBJECT |
Si applica alle stored procedure definite dall'utente riportate di seguito:
Se non viene specificato un tipo di livello 2, la proprietà si applica alla procedura stessa. |
2 |
PARAMETER |
ALTER per OBJECT procedura |
Qualsiasi per OBJECT |
|
Coda (Service Broker)
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
QUEUE |
ALTER per OBJECT coda |
Qualsiasi per OBJECT |
|
2 |
EVENT NOTIFICATION |
ALTER per OBJECT coda |
Proprietario della notifica degli eventi oppure CONTROL, ALTER, TAKE OWNERSHIP o VIEW DEFINITION per la coda oppure ALTER ANY DATABASE EVENT NOTIFICATION |
È possibile che il proprietario della notifica degli eventi sia diverso da quello della coda. |
Associazione al servizio remoto (Service Broker)
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
REMOTE SERVICE BINDING |
ALTER per REMOTE SERVICE BINDING |
Qualsiasi su REMOTE SERVICE BINDING |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Route (Service Broker)
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
ROUTE |
ALTER per REMOTE SERVICE BINDING |
Qualsiasi per ROUTE |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Regola
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
|
1 |
RULE |
ALTER per SCHEMA |
HAS_DBACCESS = 1 |
Disponibile per compatibilità con le versioni precedenti. Per ulteriori informazioni, vedere Funzionalità del Motore di database obsolete in SQL Server 2008. |
2 |
Nessuno |
|
|
|
Schema o utente
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
ALTER per SCHEMA o ALTER per USER |
Qualsiasi per APPLICATION ROLE oppure Qualsiasi per ROLE oppure Qualsiasi per USER |
Se non viene specificato un tipo di livello 1, la proprietà si applica allo schema o all'utente stesso. I possibili valori di USER sono i seguenti:
Utilizzare USER solo per l'aggiunta di una proprietà estesa a un utente.
Importante
L'opzione USER come tipo di livello 0 definito nei tipi di oggetti di livello 1 o 2 verrà rimossa in una versione futura di SQL Server. Evitare pertanto di utilizzarla in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui questa funzione è stata implementata. In alternativa, utilizzare SCHEMA come tipo di livello 0.
|
1 |
Variabile |
|
|
|
2 |
Variabile |
|
|
|
Servizio
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
SERVICE |
ALTER per SERVICE |
ALTER per SERVICE oppure CONTROL per SERVICE oppure TAKE OWNERSHIP per SERVICE oppure VIEW DEFINITION per SERVICE |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Chiave simmetrica
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
---|---|---|---|
0 |
SYMMETRIC KEY |
ALTER in CERTIFICATE |
Una qualsiasi in KEY |
1 |
Nessuno |
|
|
2 |
Nessuno |
|
|
Sinonimo
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
SYNONYM |
CONTROL per SYNONYM |
Qualsiasi per OBJECT |
|
2 |
Nessuno |
|
|
|
Tabella
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
TABLE |
ALTER per OBJECT tabella |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
Si applica a tabelle definite dall'utente. Se non viene specificato un tipo di livello 2, la proprietà si applica alla tabella stessa. |
2 |
COLUMN |
ALTER per OBJECT tabella |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
|
2 |
CONSTRAINT |
ALTER per OBJECT tabella |
ALTER per OBJECT oppure CONTROL per OBJECT oppure TAKE OWNERSHIP per OBJECT oppure VIEW DEFINITION per OBJECT |
Si applica ai vincoli seguenti:
|
2 |
INDEX |
ALTER per OBJECT tabella |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
Si applica agli indici relazionali e XML. |
2 |
TRIGGER |
ALTER per OBJECT tabella |
ALTER per OBJECT oppure CONTROL per OBJECT oppure TAKE OWNERSHIP per OBJECT oppure VIEW DEFINITION per OBJECT |
Si applica ai trigger DML seguenti:
Non si applica ai trigger DDL. |
Esempio
Nell'esempio seguente una proprietà estesa viene aggiunta alla tabella Address nello schema Person.
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Street address information for customers, employees, and vendors.',
@level0type = N'SCHEMA', @level0name = Person,
@level1type = N'TABLE', @level1name = Address;
GO
Nell'esempio seguente una proprietà estesa viene aggiunta all'indice IX_Address_StateProviceID della tabella Address nello schema Person.
USE AdventureWorks;
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_DescriptionExample',
@value = N'Nonclustered index on StateProvinceID.',
@level0type = N'SCHEMA', @level0name = Person,
@level1type = N'TABLE', @level1name = Address,
@level2type = N'INDEX', @level2name = IX_Address_StateProvinceID;
GO
Trigger
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
TRIGGER |
ALTER ANY TRIGGER per DATABASE |
ALTER ANY TRIGGER per DATABASE |
Si applica solo ai trigger DDL. |
1 |
Nessuno |
|
|
|
2 |
Nessuno |
|
|
|
Tipo
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
TYPE |
CONTROL per TYPE |
Qualsiasi per TYPE |
Si applica a tipi definiti dall'utente creati nelle versioni precedenti di SQL Server. Disponibile per compatibilità con le versioni precedenti. Per ulteriori informazioni, vedere Funzionalità del Motore di database obsolete in SQL Server 2008. |
1 |
Nessuno |
|
|
|
2 |
Nessuno |
|
|
|
Tipo
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
TYPE |
CONTROL per TYPE |
Qualsiasi per TYPE |
|
2 |
Nessuno |
|
|
|
Vista
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
VIEW |
ALTER per OBJECT vista |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
Si applica a viste definite dall'utente. Se non viene specificato un tipo di livello 2, la proprietà si applica alla vista stessa. |
2 |
COLUMN |
ALTER per OBJECT vista |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
|
2 |
INDEX |
ALTER per OBJECT vista |
Qualsiasi per COLUMN oppure Qualsiasi per OBJECT |
Si applica agli indici relazionali e XML. |
2 |
TRIGGER |
ALTER per OBJECT vista |
ALTER ANY TRIGGER per DATABASE oppure ALTER per OBJECT oppure CONTROL per OBJECT oppure TAKE OWNERSHIP per OBJECT oppure VIEW DEFINITION per OBJECT |
Si applica ai trigger DML seguenti:
Non si applica ai trigger DDL. |
Insieme di schemi XML
Livello |
Tipo di livello |
Autorizzazioni necessarie per aggiungere o eliminare una proprietà estesa |
Autorizzazioni necessarie per visualizzare una proprietà estesa |
Commenti |
---|---|---|---|---|
0 |
SCHEMA o USER |
|
|
È consigliabile utilizzare SCHEMA anziché USER. Vedere la sezione dedicata al confronto tra Schema e User di seguito in questo argomento. |
1 |
XML SCHEMA COLLECTION |
ALTER per XML SCHEMA COLLECTION |
ALTER per XML SCHEMA COLLECTION oppure CONTROL per XML SCHEMA COLLECTION oppure REFERENCES per XML SCHEMA COLLECTION oppure TAKE OWNERSHIP per XML SCHEMA COLLECTION oppure VIEW DEFINITION per XML SCHEMA COLLECTION |
Non è possibile aggiungere proprietà estese a uno spazio dei nomi XML. |
2 |
Nessuno |
|
|
|
Oggetti che non supportano le proprietà estese
Gli oggetti seguenti non supportano le proprietà estese:
Oggetti dell'ambito del database non elencati nelle tabelle precedenti, ad esempio gli oggetti full-text.
Oggetti non compresi nell'ambito del database, ad esempio gli endpoint HTTP.
Oggetti senza nome, ad esempio parametri della funzione di partizione.
Certificati, chiavi simmetriche, chiavi asimmetriche e credenziali.
Oggetti definiti dal sistema, ad esempio tabelle di sistema, viste del catalogo e stored procedure di sistema.
Confronto tra Schema e User
Nelle versioni precedenti di SQL Server gli utenti sono proprietari degli oggetti di database quali tabelle, viste e trigger. Era quindi consentito sia aggiungere una proprietà estesa a uno di tali oggetti che specificare un nome utente come tipo di livello 0. Gli oggetti di database sono contenuti in schemi che non dipendono dai rispettivi proprietari.
Se si specifica USER come tipo di livello 0, l'applicazione di una proprietà estesa a un oggetto di database può determinare un'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.
Confronto tra maschere di input e vincoli CHECK
Per specificare lo schema dei dati previsti per colonne di tabelle o viste, è possibile utilizzare sia vincoli CHECK che proprietà estese che forniscono una maschera di input. La maggior parte dei siti sceglierà la prima o la seconda soluzione finché non si verifica una delle situazioni seguenti:
I vincoli CHECK sono stati utilizzati come misura ad interim fino a quando non è stato possibile modificare tutti i programmi che utilizzano questa tabella in modo che utilizzino le proprietà della maschera di input.
Il sito supporta anche gli utenti che possono aggiornare i dati tramite strumenti ad hoc che non prevedono la lettura delle proprietà estese.
La maschera di input presenta un indubbio vantaggio rispetto al vincolo CHECK in quanto consente di applicare la logica nelle applicazioni, che potranno generare errori di carattere maggiormente informativo se vengono specificati dati non formattati correttamente. La maschera di input richiede tuttavia una chiamata distinta a fn_listextendedproperty o sys.extended_properties per ottenere la proprietà e l'aggiunta della logica per l'applicazione della maschera in tutti i programmi.
Replica delle proprietà estese
Le proprietà estese vengono replicate solo durante la sincronizzazione iniziale tra il server di pubblicazione e il Sottoscrittore. Se si aggiunge o si modifica una proprietà estesa dopo la sincronizzazione iniziale, la modifica non viene replicata. Per ulteriori informazioni sulla replica degli oggetti di database, vedere Pubblicazione di dati e oggetti di database.
Utilizzo delle proprietà estese nelle applicazioni
Le proprietà estese costituiscono unicamente una posizione denominata per l'archiviazione dei dati. È quindi necessario codificare tutte le applicazioni in modo che eseguano la query sulla proprietà e scegliere l'operazione appropriata. L'aggiunta di una proprietà di didascalia a una colonna non implica, ad esempio, la creazione di una didascalia visualizzabile in un'applicazione. È quindi necessario codificare ciascuna applicazione in modo da leggere e visualizzare correttamente la didascalia.
Per aggiungere una proprietà estesa
Per aggiornare una proprietà estesa
Per eliminare una proprietà estesa
Per visualizzare una proprietà estesa
Vedere anche