Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Usare i SYNONYM in SQL Server 2005

Un modo "compatto" per denominare/identificare un oggetto all'interno di un database SQL Server 2005
Un modo "compatto" per denominare/identificare un oggetto all'interno di un database SQL Server 2005
Link copiato negli appunti

Tra le tante novità introdotte in SQL Server 2005 troviamo i SYNONYMS o sinonimi.
In questo articolo ne illustremo l'utilizzo e le funzionalità principali.

Identificare un oggetto del database

Chi usa SQL Server conosce la sintassi in quattro-parti (detta "fully-qualified") utilizzata per identificare gli oggetti del database.

Sintassi in quattro parti ("fully qualified")

[[[server.][database].][schema_name].]object_name

Ovviamente per richiamare un oggetto non è tassativo usare la forma estesa, possiamo anche ricorrere al solo nome dell'oggetto (cosa che avviene nella maggior parte dei casi). Il listato 1 mostra i percorsi possibili per identificare in modo univoco una tabella all'interno di un database SQL.

Listato 1. Identificare un oggetto un SQL Server

MioServer.MioDB.MioSchema.MiaTabella --sintassi obbligatoria per i linked server, opzionale per gli altri oggetti
MioDB.MioSchema.MiaTabella
MioSchema.MiaTabella
MiaTabella

Usare i SYNONYMS

Un SYNONYM è un modo "compatto" per denominare/identificare un oggetto all'interno di un database SQL Server 2005. Esso sostituisce con un singolo nome la denominazione a due, tre o quattro nomi vista in precedenza. Vediamo un esempio concreto:

Listato 2. Creare un SYNONYM

CREATE SYNONYM OrdiniClienti
FOR DB_ECommerce.Business.Ordini

Dopo aver creato il sinonimo possiamo utilizzarlo all'interno di una SELECT.

Listato 3. Usare SYNONYM

--forma compatta
SELECT * FROM OrdiniClienti
--forma prolissa
SELECT * FROM DB_ECommerce.Business.Ordini

I sinonimi aiutano lo sviluppatore, in diversi modi:

  1. Rendendo più leggibili e compatte le query che coinvolgono parecchie tabelle (JOIN query).
  2. Facilitando la creazione di uno strato di astrazione tra applicazione e oggetti base referenziati nei sinonimi.

Per chiare quest'ultimo punto proviamo a fare un esempio concreto. Supponiamo di avere un'applicativo di Ecommerce che memorizza gli ordinativi in una tabella Ordini del database DB_Ecommerce, avendo però come riferimento per le INSERT il sinonimo OrdiniClienti, creato nel listato 2 anzichè l'oggetto base Ordini.

Con uno scenario simile diventa semplice cambiare il db e la tabella di destinazione degli ordinativi durante la fase di test rispetto alla fase di produzione.

Listato 4. Creare uno strato di astrazione a livello applicativo

--in fase di test cambio il db e la tabella di destinazione
DROP SYNONYM OrdiniClienti
CREATE SYNONYM OrdiniClienti
FOR DB_ECommerceTEST.Test.OrdiniDiProva
INSERT INTO OrdiniClienti (....)
INSERT INTO OrdiniClienti (....)
--in produzione riporto gli ordini nel db di destinazione
DROP SYNONYM OrdiniClienti
CREATE SYNONYM OrdiniClienti
FOR DB_ECommerce.Business.Ordini

Senza modificare una riga di codice nell'applicazione abbiamo dirottato la memorizzazione degli ordinativi dal database DB_ECommerce al database DB_ECommerceTEST. Viceversa finita la fase di test abbiamo riportato la situazione alla normalità eseguendo l'operazione opposta.

I sinonimi sono indispensabili in quelle situazioni in cui non possiamo fare a meno di utilizzare la sintassi in quattro-parti per accedere ad un oggetto del database, è il caso dei linked servers:

Listato 5. Usare un SYNONYN con un linked server

EXEC sp_addlinkedserver SQLServerRemoto;
GO
USE tempdb;
GO
CREATE SYNONYM CategorieSR FOR
SQLServerRemoto.DB_Ecommerce.Catalogo.CategoriaProdotto
--ora posso accedere al server remoto in modo rapido e intuitivo
SELECT * FROM CategorieSR

Contesti di espressione e limiti dei sinonimi

I sinonimi possono essere utilizzati all'interno di diverse istruzioni SQL: SELECT, INSERT, UPDATE, DELETE, EXECUTE, SUB-SELECT. Inoltre è possibile creare, eliminare e fare riferimento ai sinonimi all'interno di istruzioni SQL dinamiche.

L'associazione tra il sinomino e l'oggetto base a cui fa riferimento viene verificata runtime e non a designtime, questo implica la possibilità di creare sinonimi per oggetti non ancora esistenti.

I sinonimi possono essere creati per:

  • Tabelle
  • Viste
  • (CLR) Stored Procedures
  • (CLR) Funzioni valutate a livello di tabella
  • (CLR) Funzioni Scalari
  • (CLR) Funzioni di aggregazione
  • Extended Stored Procedures
  • (SQL) Funzioni valutate a livello di tabella
  • (SQL) Funzioni valutate a livello di tabella (inline)
  • (SQL) Funzioni Scalari
  • (SQL) Stored Procedure

Limiti d'utilizzo:

  • Non è possibile utilizzare i sinonimi con istruzioni DDL full-text.
  • Non è possibile fare riferimento a un sinonimo che si trova in un server collegato.
  • Non è possibile richiamare un sinonimo nei seguenti contesti: Vincoli CHECK,Colonne calcolate,Espressioni predefinite,Espressioni di regole,Viste associate a schema, Funzioni associate a schema. (questo perchè i sinonimi non sono abbianti a uno schema)

È possibile approfondire la conoscenza dei sinonimi sui BOL di SQL Server 2005 a questo
indirizzo.

Ti consigliamo anche