Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
endpoint di analisi SQL di Azure Synapse Analytics
Platform System (PDW)
in Microsoft Fabric
Warehouse nel database SQL di Microsoft Fabric
in Microsoft Fabric
Crea una tabella virtuale il cui contenuto (colonne e righe) è definito da una query. Utilizzare questa istruzione per creare una vista dei dati in una o più tabelle nel database. Ad esempio, è possibile utilizzare una vista per gli scopi seguenti:
Per analizzare, semplificare e personalizzare la visualizzazione del database per ogni utente.
Come meccanismo di sicurezza grazie al quale è possibile consentire agli utenti di accedere ai dati tramite una vista, senza concedere loro le autorizzazioni di accesso alle tabelle di base sottostanti.
Per fornire un'interfaccia compatibile con le versioni precedenti con cui emulare una tabella il cui schema è stato modificato.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per SQL Server e database SQL di Azure.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Sintassi per Azure Synapse Analytics e Parallel Data Warehouse.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Sintassi per Microsoft Fabric Data Warehouse e endpoint di analisi SQL.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Argomenti
OR ALTER
Si applica a: database SQL di Azure e SQL Server, a partire da SQL Server 2016 (13.x) SP1.
Modifica in modo condizionale la vista solo se esiste già.
schema_name
Nome dello schema a cui appartiene la vista.
view_name
Nome della vista. I nomi di vista devono essere conformi alle regole per gli identificatori. Il nome del proprietario della vista è facoltativo.
colonna
Nome da assegnare a una colonna della vista. Un nome di colonna è obbligatorio solo quando una colonna è derivata da un'espressione aritmetica, una funzione o una costante; quando due o più colonne potrebbero avere lo stesso nome, in genere a causa di un join; o quando viene specificata una colonna in una vista un nome diverso da quello della colonna da cui deriva. I nomi delle colonne possono essere assegnati anche nell'istruzione SELECT
.
Se la colonna non viene specificata, le colonne della vista acquisiscono gli stessi nomi delle colonne nell'istruzione SELECT
.
Nota
Nelle colonne della vista le autorizzazioni per un nome di colonna vengono applicate in un'istruzione CREATE VIEW
o ALTER VIEW
indipendentemente dall'origine dei dati sottostanti. Ad esempio, se vengono concesse autorizzazioni per la SalesOrderID
colonna in un'istruzione CREATE VIEW, un'istruzione ALTER VIEW
può denominare la SalesOrderID
colonna con un nome di colonna diverso, ad esempio OrderRef
, e avere ancora le autorizzazioni associate alla vista usando SalesOrderID
.
COME
Specifica le operazioni che la vista deve eseguire.
select_statement
Istruzione SELECT
che definisce la vista. Nell'istruzione è possibile specificare più di una tabella e altre viste. Le autorizzazioni appropriate sono necessarie per selezionare gli oggetti a cui si fa riferimento nella SELECT
clausola della vista creata.
Una vista non deve essere un subset delle righe e delle colonne di una determinata tabella. È possibile creare una vista che usa più tabelle o altre viste con una SELECT
clausola di qualsiasi complessità.
In una definizione di vista indicizzata, l'istruzione SELECT
deve essere una singola istruzione di tabella o un'aggregazione multitable JOIN
con aggregazione facoltativa.
Le SELECT
clausole in una definizione di vista non possono includere:
Clausola
ORDER BY
, a meno che non sia presente anche unaTOP
clausola nell'elenco di selezione dell'istruzioneSELECT
Importante
La
ORDER BY
clausola viene utilizzata solo per determinare le righe restituite dallaTOP
clausola oOFFSET
nella definizione della vista. LaORDER BY
clausola non garantisce risultati ordinati quando viene eseguita una query sulla vista, a meno cheORDER BY
non sia specificato anche nella query stessa.Parola chiave
INTO
Clausola
OPTION
Un riferimento a una tabella temporanea o a una variabile di tabella
Poiché select_statement usa l'istruzione SELECT
, è possibile usare hint di join e hint di tabella come specificato nella FROM
clausola . Per altre informazioni, vedere FROM (Transact-SQL) e SELECT (Transact-SQL).
Le funzioni e più SELECT
istruzioni separate da UNION
o UNION ALL
possono essere usate in select_statement.
OPZIONE CHECK
Forza il rispetto del set di criteri specificato in select_statement per tutte le istruzioni di modifica dei dati eseguite sulla vista. Quando una riga viene modificata tramite una vista, WITH CHECK OPTION
verifica che i dati rimangano visibili tramite la vista dopo il commit della modifica.
Nota
L'unico CHECK OPTION
vale per gli aggiornamenti eseguiti tramite la visualizzazione. Non è applicabile agli aggiornamenti eseguiti direttamente nelle tabelle sottostanti di una vista.
CRIPTAZIONE
Si applica a: SQL Server 2008 (10.0.x) e versioni successive e database SQL di Azure.
Crittografa le voci in sys.syscomments che contengono il testo dell'istruzione CREATE VIEW
. L'uso WITH ENCRYPTION
di impedisce la pubblicazione della vista come parte della replica di SQL Server.
SCHEMABINDING
Associa la vista allo schema della tabella o delle tabelle sottostanti. Quando SCHEMABINDING
viene specificato, la tabella o le tabelle di base non possono essere modificate in modo da influire sulla definizione della vista. È necessario prima modificare o eliminare la definizione della vista per rimuovere le dipendenze dalla tabella da modificare. Quando si usa SCHEMABINDING
, il select_statement deve includere i nomi in due parti (schema.oggetto) di tabelle, viste o funzioni definite dall'utente a cui si fa riferimento. Tutti gli oggetti a cui viene fatto riferimento devono essere presenti nello stesso database.
Le viste o le tabelle che fanno parte di una vista creata con la clausola SCHEMABINDING non possono essere eliminate, a meno che la vista non venga eliminata o modificata in modo che non sia più associata a uno schema. In caso contrario, il motore di database genera un errore. Inoltre, l'esecuzione ALTER TABLE
di istruzioni su tabelle che fanno parte di viste con binding dello schema ha esito negativo quando queste istruzioni influiscono sulla definizione della vista.
VIEW_METADATA
Specifica che l'istanza di SQL Server dovrà restituire alle API DB-Library, ODBC e OLE DB le informazioni sui metadati relativi alla vista anziché alla tabella o alle tabelle di base quando vengono richiesti metadati in modalità browse per una query che fa riferimento alla vista. I metadati in modalità browse sono metadati aggiuntivi che l'istanza di SQL Server restituisce a queste API sul lato client. Questi metadati consentono alle API sul lato client di implementare cursori sul lato client aggiornabili. I metadati in modalità browse includono informazioni sulla tabella di base a cui appartengono le colonne del set di risultati.
Per le viste create con VIEW_METADATA
, i metadati in modalità browse restituiscono il nome della vista e non i nomi delle tabelle di base quando descrive le colonne della vista nel set di risultati.
Quando una vista viene creata tramite WITH VIEW_METADATA
, tutte le relative colonne, ad eccezione di una colonna timestamp , sono aggiornabili se la vista contiene INSTEAD OF INSERT
o INSTEAD OF UPDATE
trigger. Per ulteriori informazioni sulle viste aggiornabili, vedere la sezione Osservazioni.
Osservazioni:
È possibile creare una vista solo nel database corrente. Deve CREATE VIEW
essere la prima istruzione in un batch di query. Una vista può includere al massimo 1.024 colonne.
Quando si esegue una query tramite una vista, il motore di database verifica che tutti gli oggetti di database a cui viene fatto riferimento nell'istruzione esistano e siano validi nel contesto dell'istruzione, nonché che le istruzioni di modifica dei dati non violino le regole di integrità dei dati. Se la verifica ha esito negativo, viene visualizzato un messaggio di errore. In caso contrario, l'azione viene convertita automaticamente in un'operazione sulla tabella o sulle tabelle sottostanti.
Se si cerca di usare una vista che dipende da una tabella o una vista rimossa, il motore di database genera un messaggio di errore. Se viene creata una nuova tabella o vista per sostituire quella eliminata e la struttura della nuova tabella non è diversa rispetto alla tabella di base precedente, la vista risulta di nuovo utilizzabile. Se la struttura della nuova tabella o vista è diversa, la vista deve essere eliminata e ricreata.
Se una vista non viene creata con la SCHEMABINDING
clausola , eseguire sp_refreshview quando vengono apportate modifiche agli oggetti sottostanti alla vista che influiscono sulla definizione della vista. In caso contrario, le query sulla vista possono generare risultati imprevisti.
Quando si crea una vista, le relative informazioni vengono archiviate nelle viste del catalogo seguenti: sys.views, sys.columns e sys.sql_expression_dependencies. Il testo dell'istruzione CREATE VIEW
viene archiviato nella vista del catalogo sys.sql_modules .
Una query che usa un indice in una vista definita con espressioni numeriche o float potrebbe avere un risultato diverso da una query simile che non usa l'indice nella vista. Questa differenza può essere causata da errori di arrotondamento durante INSERT
le azioni , DELETE
o UPDATE
nelle tabelle sottostanti.
Il motore di database salva le impostazioni di SET QUOTED_IDENTIFIER
e SET ANSI_NULLS
quando viene creata una vista. Queste impostazioni originali vengono utilizzate per analizzare la vista quando viene utilizzata. Pertanto, tutte le impostazioni della sessione client per SET QUOTED_IDENTIFIER
e SET ANSI_NULLS
non influiscono sulla definizione di visualizzazione quando si accede alla visualizzazione.
In Azure Synapse Analytics le viste non supportano l'associazione di schemi. Pertanto, se vengono apportate modifiche agli oggetti sottostanti, è necessario eliminare e ricreare la vista per aggiornare i metadati sottostanti. Per altre informazioni, vedere Viste T-SQL con pool T-SQL dedicato e pool SQL serverless in Azure Synapse Analytics.
In Azure Synapse Analytics, le viste aggiornabili, i trigger DML (di tipo AFTER
o INSTEAD OF
) e le viste partizionate non sono supportate. Per altre informazioni, vedere Viste T-SQL con pool T-SQL dedicato e pool SQL serverless in Azure Synapse Analytics.
In Azure Synapse Analytics le viste partizionate non sono supportate. Per altre informazioni, vedere Viste T-SQL con pool T-SQL dedicato e pool SQL serverless in Azure Synapse Analytics.
Nel database SQL dell'infrastruttura è possibile creare viste, ma non viene eseguita la mirroring in Fabric OneLake. Per altre informazioni, vedere Limitazioni del mirroring del database SQL di Infrastruttura.
Visualizzazioni aggiornabili
È possibile modificare i dati di una tabella di base sottostante tramite una vista solo se vengono soddisfatti i requisiti seguenti:
Tutte le modifiche, incluse
UPDATE
le istruzioni ,INSERT
eDELETE
, devono fare riferimento alle colonne di una sola tabella di base.Le colonne modificate nella vista devono fare riferimento direttamente ai dati sottostanti nelle colonne della tabella. Le colonne non possono essere derivate in altro modo, ad esempio tramite:
Funzione di aggregazione:
AVG
,COUNT
SUM
,MIN
,MAX
,GROUPING
,STDEV
,STDEVP
,VAR
, eVARP
.Un calcolo. La colonna non può essere calcolata tramite un'espressione che utilizza altre colonne. Le colonne create mediante gli operatori sui set UNION, UNION ALL, CROSSJOIN, EXCEPT e INTERSECT sono considerate un calcolo e non sono aggiornabili.
Le colonne modificate non sono interessate dalle
GROUP BY
clausole ,HAVING
oDISTINCT
.TOP non viene utilizzato in nessun punto della select_statement della vista insieme alla
WITH CHECK OPTION
clausola .
Le restrizioni sopra indicate sono valide sia per qualsiasi sottoquery nella clausola FROM della vista sia per la vista stessa. In genere, il motore di database deve essere in grado di tracciare senza ambiguità le modifiche dalla definizione della vista a una tabella di base. Per altre informazioni, vedere Modificare i dati tramite una vista.
Se le restrizioni sopra indicate non consentono di modificare i dati direttamente tramite una vista, è possibile ricorrere alle soluzioni seguenti:
Trigger INSTEAD OF
INSTEAD OF
I trigger possono essere creati in una vista per rendere aggiornabile una visualizzazione. IlINSTEAD OF
trigger viene eseguito invece dell'istruzione di modifica dei dati in cui è definito il trigger. e consente all'utente di specificare il set di azioni che devono essere eseguite per elaborare l'istruzione di modifica dei dati. Pertanto, se esiste unINSTEAD OF
trigger per una vista in un'istruzione di modifica dei dati specifica (INSERT
,UPDATE
oDELETE
), la vista corrispondente è aggiornabile tramite tale istruzione. Per altre informazioni suiINSTEAD OF
trigger, vedere Trigger DML.Viste partizionate
Se la vista è partizionata, è aggiornabile ma con particolari restrizioni. Quando necessario, il motore di database effettua una distinzione tra viste partizionate locali, ovvero le viste nelle quali tutte le tabelle coinvolte e la vista stessa si trovano nella stessa istanza di SQL Server, e viste partizionate distribuite, ovvero le viste nelle quali almeno una tabella si trova in un server diverso o remoto.
Viste partizionate
Una vista partizionata è una vista definita da una UNION ALL
di tabelle membro strutturate nello stesso modo, ma archiviate separatamente come più tabelle nella stessa istanza di SQL Server o in un gruppo di istanze autonome di server SQL Server, denominati server di database federati.
Nota
Il metodo consigliato per il partizionamento locale dei dati in un server prevede l'utilizzo di tabelle partizionate. Per ulteriori informazioni, vedere Partitioned Tables and Indexes.
Quando si progetta uno schema di partizionamento, deve essere chiaro quali dati appartengono a ogni partizione. Ad esempio, i dati della tabella Customers
vengono distribuiti in tre tabelle membro su tre server: Customers_33
su Server1
, Customers_66
su Server2
e Customers_99
su Server3
.
Una vista partizionata in Server1
viene definita nel modo seguente:
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from member table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99;
In generale, una vista viene definita partizionata se utilizza il formato seguente:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
Condizioni per la creazione di viste partizionate
Elenchi di selezione (select
list
)Nell'elenco di colonne della definizione della vista, selezionare tutte le colonne nelle tabelle membro.
Assicurarsi che le colonne nella stessa posizione ordinale in ogni oggetto
select list
siano dello stesso tipo, incluse le regole di confronto. Non è sufficiente che le colonne siano tipi convertibili in modo implicito, come in genere accade perUNION
.Inoltre, è necessario che almeno una colonna, ad esempio
<col>
, sia presente in tutti gli elenchi di selezione nella stessa posizione ordinale. Definire<col>
in modo che le tabelle membroT1, ..., Tn
abbiano, rispettivamente, vincoli CHECKC1, ..., Cn
definiti in<col>
.Il vincolo
C1
definito nella tabellaT1
deve avere il formato seguente:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | \<= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >
I vincoli devono essere tali per cui qualsiasi valore di
<col>
specificato possa soddisfare al massimo uno dei vincoliC1, ..., Cn
, in modo che i vincoli formino un set di intervalli disgiunti o non sovrapposti. La colonna<col>
in cui sono definiti i vincoli disgiunti è denominata colonna di partizionamento. La colonna di partizionamento può avere nomi diversi nelle tabelle sottostanti. Per soddisfare le condizioni precedenti della colonna di partizionamento, i vincoli devono essere abilitati e attendibili. Se i vincoli sono disabilitati, riabilitare il controllo dei vincoli usando l'opzioneCHECK CONSTRAINT *constraint_name*
diALTER TABLE
e usando l'opzioneWITH CHECK
per convalidarli.Negli esempi seguenti vengono illustrati alcuni set di vincoli validi:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
Nell'elenco di selezione non è consentito utilizzare più volte la stessa colonna.
Colonna di partizionamento
Deve fare parte della colonna PRIMARY KEY della tabella.
Non può essere una colonna calcolata, Identity, predefinita o timestamp.
Se una colonna di una tabella membro ha più vincoli, vengono ignorati tutti i vincoli, anche quando è necessario determinare se la vista è partizionata. Per soddisfare le condizioni della vista partizionata, assicurarsi che ci sia un solo vincolo di partizionamento nella colonna di partizionamento.
Non sono previste restrizioni per quanto concerne l'aggiornabilità della colonna di partizionamento.
Tabelle membro o tabelle sottostanti
T1, ..., Tn
Le tabelle possono essere locali o presenti in altri computer che eseguono SQL Server a cui viene fatto riferimento tramite un nome composto da quattro parti oppure un nome basato su OPENDATASOURCE o OPENROWSET. La sintassi di OPENDATASOURCE e OPENROWSET consente di specificare un nome di tabella, ma non una query pass-through. Per altre informazioni, vedere OPENDATASOURCE (Transact-SQL) e OPENROWSET (Transact-SQL).
Se una o più tabelle membro sono remote, la vista viene definita vista partizionata distribuita ed è necessario rispettare alcuni ulteriori requisiti descritti di seguito in questa sezione.
La stessa tabella non può essere visualizzata due volte nel set di tabelle combinate con l'istruzione
UNION ALL
.Le tabelle membro non possono includere indici creati su colonne calcolate della tabella.
Le tabelle membro hanno i vincoli PRIMARY KEY nello stesso numero di colonne.
Tutte le tabelle membro della vista hanno la stessa impostazione di riempimento ANSI. Questa impostazione può essere impostata usando l'opzione user options in
sp_configure
o l'istruzione SET.
Condizioni per la modifica dei dati nelle viste partizionate
Le istruzioni che modificano i dati in viste partizionate sono soggette alle restrizioni seguenti:
L'istruzione
INSERT
fornisce valori per tutte le colonne della vista, anche se le tabelle membro sottostanti hanno unDEFAULT
vincolo per tali colonne o se consentonoNULL
valori. Per le colonne della tabella membro conDEFAULT
definizioni, le istruzioni non possono usare in modo esplicito la parola chiaveDEFAULT
.Il valore inserito nella colonna di partizionamento soddisfa almeno uno dei vincoli sottostanti; in caso contrario, l'azione di inserimento ha esito negativo con una violazione del vincolo.
UPDATE
Le istruzioni non possono specificare laDEFAULT
parola chiave come valore nellaSET
clausola , anche se la colonna ha unDEFAULT
valore definito nella tabella membro corrispondente.Le colonne nella vista che sono una colonna Identity in una o più tabelle membro non possono essere modificate tramite un'istruzione
INSERT
oUPDATE
.Se una delle tabelle membro contiene una colonna timestamp , i dati non possono essere modificati utilizzando un'istruzione
INSERT
oUPDATE
.Se una delle tabelle membro contiene un trigger o un
ON UPDATE CASCADE/SET NULL/SET DEFAULT
vincolo oON DELETE CASCADE/SET NULL/SET DEFAULT
, la vista non può essere modificata.INSERT
Le azioni ,UPDATE
eDELETE
su una vista partizionata non sono consentite se è presente un self join con la stessa vista o con una delle tabelle membro nell'istruzione .L'importazione bulk dei dati in una vista partizionata non è supportata dalle
bcp
BULK INSERT
istruzioni eINSERT ... SELECT * FROM OPENROWSET(BULK...)
. È tuttavia possibile inserire più righe in una vista partizionata usando l'istruzione INSERT.Nota
Per aggiornare una vista partizionata, l'utente deve disporre
INSERT
delle autorizzazioni ,UPDATE
eDELETE
per le tabelle membro.
Condizioni aggiuntive per le viste partizionate distribuite
Per le viste partizionate distribuite, ovvero le viste nelle quali una o più tabelle membro sono remote, devono essere soddisfatti i requisiti aggiuntivi seguenti:
Viene avviata una transazione distribuita per garantire l'atomicità in tutti i nodi interessati dall'aggiornamento.
Impostare l'opzione
XACT_ABORT
SET
suON
perINSERT
le istruzioni ,UPDATE
oDELETE
per il funzionamento.Per tutte le colonne delle tabelle remote di tipo smallmoney a cui viene fatto riferimento in una vista partizionata viene eseguito il mapping come money. Pertanto, anche le colonne corrispondenti delle tabelle locali, ovvero le colonne che occupano la stessa posizione ordinale nell'elenco di selezione, devono essere di tipo money.
Con il livello di compatibilità del database 110 o superiore, viene eseguito il mapping come smalldatetime di tutte le colonne delle tabelle remote di tipo smalldatetime a cui viene fatto riferimento in una vista partizionata. Le colonne corrispondenti delle tabelle locali, ovvero le colonne che occupano la stessa posizione ordinale nell'elenco di selezione, devono essere di tipo smalldatetime. Questo comportamento differisce dalle versioni precedenti di SQL Server in cui per le colonne delle tabelle remote di tipo smalldatetime a cui viene fatto riferimento in una vista partizionata viene eseguito il mapping come datetime e le colonne corrispondenti nelle tabelle locali devono essere di tipo datetime. Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).
Qualsiasi server collegato nella vista partizionata non può essere di tipo loopback, ovvero non deve puntare alla stessa istanza di SQL Server.
L'impostazione dell'opzione SET ROWCOUNT
viene ignorata per INSERT
le azioni , UPDATE
e DELETE
che coinvolgono viste partizionate aggiornabili e tabelle remote.
Quando sono disponibili le tabelle membro e la definizione della vista partizionata, l'utilità Query Optimizer di SQL Server crea piani intelligenti che usano le query in modo efficiente per l'accesso ai dati delle tabelle membro. Con le definizioni dei CHECK
vincoli, Query Processor esegue il mapping della distribuzione dei valori di chiave tra le tabelle membro. Quando un utente esegue una query, Query Processor confronta la mappa con i valori specificati nella WHERE
clausola e compila un piano di esecuzione con una quantità minima di trasferimento di dati tra server membri. Pertanto, se alcune tabelle membro si trovano in server remoti, l'istanza di SQL Server risolve le query distribuite in modo che la quantità di dati distribuiti da trasferire sia minima.
Considerazioni sulla replica
Per creare viste partizionate di tabelle membro coinvolte nella replica, devono essere soddisfatti i requisiti seguenti:
Se le tabelle sottostanti sono coinvolte nella replica transazionale o di tipo merge con sottoscrizioni aggiornabili, assicurarsi che nell'elenco di selezione sia presente anche la colonna uniqueidentifier.
Tutte
INSERT
le azioni nella vista partizionata devono fornire unNEWID()
valore per la colonna uniqueidentifier . Qualsiasi azione UPDATE sulla colonna uniqueidentifier deve fornireNEWID()
come valore perché non è possibile utilizzare la parola chiave DEFAULT.La replica di aggiornamenti tramite la vista equivale alla replica di tabelle in due database distinti, ovvero le tabelle vengono gestite da agenti di replica diversi e l'ordine degli aggiornamenti non è prevedibile.
Autorizzazioni
Richiede l'autorizzazione CREATE VIEW per il database e l'autorizzazione ALTER per lo schema in cui viene creata la vista.
Esempi
Negli esempi seguenti viene utilizzato il AdventureWorks2022
database o AdventureWorksDW2022
.
R. Usare CREATE VIEW per creare una vista
Nell'esempio seguente viene creata una vista usando un'istruzione SELECT
. Una vista semplice risulta utile quando vengono eseguite query frequenti su una combinazione di colonne. I dati di questa vista provengono dalle HumanResources.Employee
tabelle e Person.Person
del database AdventureWorks2022. I dati contengono informazioni sul nome e sulla data di assunzione dei dipendenti di Adventure Works Cycles. È possibile creare la vista per la persona incaricata di tenere traccia del periodo di assunzione dei dipendenti, senza però consentire a tale utente di accedere a tutti i dati di queste tabelle.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Usare WITH ENCRYPTION
Nell'esempio seguente viene utilizzata l'opzione WITH ENCRYPTION
e vengono illustrate colonne calcolate, colonne rinominate e più colonne.
Si applica a: SQL Server 2008 (10.0.x) e versioni successive e database SQL.
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
C. Usare WITH CHECK OPTION
Nell'esempio seguente viene illustrata una vista denominata dbo.SeattleOnly
che fa riferimento a cinque tabelle e consente di applicare modifiche ai dati solo per i dipendenti che risiedono a Seattle.
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. Usare funzioni predefinite all'interno di una visualizzazione
Nell'esempio seguente viene illustrata una definizione di vista che include una funzione predefinita. Quando si utilizzano le funzioni, è necessario specificare un nome di colonna per la colonna derivata.
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
E. Usare dati partizionati
Nell'esempio seguente vengono utilizzate le tabelle denominate SUPPLY1
, SUPPLY2
, SUPPLY3
e SUPPLY4
, Queste tabelle corrispondono alle tabelle dei fornitori di quattro uffici, situate in aree diverse.
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
--Create the view that combines all supplier tables.
CREATE VIEW dbo.all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
F. Creare una vista creando un join di due tabelle
Nell'esempio seguente viene creata una vista tramite un'istruzione SELECT
semplice con un elemento OUTER JOIN
. I risultati della query join popolano la vista.
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
Contenuto correlato
- ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- Creazione di una stored procedure
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (Transact-SQL)
- sp_help (Transact-SQL)
- sp_helptext (Transact-SQL)
- sp_refreshview (Transact-SQL)
- sp_rename (Transact-SQL)
- sys.views (Transact-SQL)
- UPDATE (Transact-SQL)
- EVENTDATA (Transact-SQL)