Qual è l'utilizzo di SYNONYM in SQL Server 2008?Qual è l'utilizzo di SYNONYM in SQL Server 2008?
risposta
Sembra (da here) per creare un alias per un'altra tabella, in modo da poter fare facilmente riferimento ad esso. Come come
select * from table longname as ln
ma permanente e pervasiva.
Modifica: funziona per funzioni definite dall'utente, oggetti locali e remoti, non solo tabelle.
Un esempio dell'utilità di questo potrebbe essere se si ha una stored procedure su un database utenti che doveva accedere a una tabella Clienti su un altro server di produzione. Supponendo che crei la stored procedure nel database , è possibile impostare un sinonimo come il seguente: USE Users; GO CREATE SYNONYM Client FOR Offsite01.Production.dbo.Clients; GO
Ora, quando si scrive la stored procedure invece di dover scrivere che intera alias ogni volta che si accede la tabella si può semplicemente utilizzare l'alias Clienti. Inoltre, se mai cambiare la posizione o il nome del percorso del database produzione tutto quello che che dovete fare è modificare un sinonimo invece di dover modificare tutte le stored procedure che fanno riferimento al vecchio server .
In alcuni sistemi aziendali, si può avere a che fare con oggetti remoti su cui non hanno alcun controllo. Ad esempio, un database gestito da un altro reparto o team.
I sinonimi possono aiutare a disaccoppiare il nome e la posizione dell'oggetto sottostante dal codice SQL. In questo modo è possibile codificare una tabella sinonimo anche se la tabella desiderata viene spostata in un nuovo server/database o rinominata.
Per esempio, ho potuto scrivere una query come questa:
insert into MyTable
(...)
select ...
from remoteServer.remoteDatabase.dbo.Employee
ma poi se il server o del database, lo schema, o un tavolo cambiamenti che avrebbe un impatto il mio codice. Invece posso creare un sinonimo per il server remoto e utilizzare il sinonimo invece:
insert into MyTable
(...)
select ...
from EmployeeSynonym
Se l'oggetto sottostante cambia posizione o il nome, ho solo bisogno di aggiornare il mio sinonimo per puntare al nuovo oggetto.
Si può effettivamente creare un sinonimo in un database vuoto e fare riferimento a un oggetto in un altro database, e quindi farlo funzionare come si deve, anche se è in un database completamente vuoto (oltre il sinonimo che hai creato ovviamente).
I sinonimi forniscono un ottimo livello di astrazione, che consente di utilizzare nomi amichevoli e/o locali per tabelle, viste, procedure e funzioni verbosamente denominate o remote.
Per esempio
Considerate avete la e dbschema come ABC
e il nome della tabella come Employee
e ora è necessario accedere alla tabella Employee
nel vostro Server2
per eseguire un'operazione di query.
Quindi è necessario utilizzare come Server1.ABC.Employee
espone tutto ServerName, SchemaName e TableName.
Invece di questo si può creare un collegamento sinonimo Create Synonym EmpTable for Server1.ABC.Employee
Così si può accedere come Select * from Peoples p1 inner join EmpTable emp where emp.Id=p1.ID
modo che dà i vantaggi di Astrazione, Facilità di cambiamento, scalabilità.
In seguito, se si desidera modificare Servername o Schema o tablename, è sufficiente modificare solo il sinonimo e non è necessario effettuare la ricerca di tutti e sostituirli.
Se lo hai usato, sentirai il vero vantaggio del sinonimo. Può anche combinarsi con il server collegato e offrire maggiori vantaggi agli sviluppatori.
L'uso di sinonimi ha un effetto sulle prestazioni quando si accede a un server remoto? –
Sono stato uno sviluppatore Oracle da molto tempo e ho fatto il salto a SQL Server.
Ma, un altro ottimo utilizzo per i sinonimi è durante il ciclo di sviluppo. Se si hanno più sviluppatori che modificano lo stesso schema, è possibile utilizzare un sinonimo per puntare al proprio schema piuttosto che modificare direttamente la tabella "produzione". Ciò ti consente di fare le tue cose e gli altri sviluppatori non subiranno alcun impatto mentre stai apportando modifiche e debug.
Sono contento di vedere questi in SQL Server 2008 ...
Un sinonimo è un oggetto di database che serve le seguenti finalità:
- Fornisce un nome alternativo per un altro oggetto di database, di cui al come oggetto base, che può esistere su un server locale o remoto.
- Fornisce un livello di astrazione che protegge un'applicazione client dalle modifiche apportate al nome o alla posizione dell'oggetto di base.
Non ho mai richiesto il primo ma il secondo problema è piuttosto utile.
Posso arrivare a conoscere il valore Identity corrente della riga inserita utilizzando la funzione come questo-> Seleziona IDENT_CURRENT ('')? Non voglio ottenere il valore dell'identità facendo max (ID) di quella tabella. È possibile? –
ivorykoder
@ivorykoder No. Per quanto ne so, questa sintassi non funzionerà. – FistOfFury
L'utilizzo di sinonimi ha un effetto sulle prestazioni quando si accede a un server remoto? –