SQL Server ed ALM su database


Il blog di Alessandro Alpi
Archivio Posts
Anno 2018

Anno 2017

Anno 2016

Anno 2015

Anno 2014

Anno 2013

Anno 2012

Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Intellisense, ti sei dimenticato i sinonimi?

In questi giorni in cui sono veramente occupato a riscrivere codice mi sono imbattuto in un problema abbastanza fastidioso.

Siccome piano piano il nostro database di produzione dovrà migrare verso nuovi nomi oggetto (perchè gli attuali sono inutilizzabili, e non mi soffermo) e siccome non mi posso permettere l'esecuzione di una semplice sp_rename, ho dovuto creare un livello in più che mi simulasse la presenza dei nuovi oggetti, lasciando però inalterati gli originali.
Di conseguenza, con questo livello mi posso permettere piano piano di riscrivere tutto (e mamma mia quanto è ) senza intaccare il funzionamento delle procedure/funzioni/viste e del SQL cablato nel codice, eh sì, purtroppo anche di quello .
I sinonimi mi sono stati veramente di aiuto. Grazie ad essi, usati come puntatori ad oggetti già esistenti, mi posso creare le mie nuove stored procedure che puntano ai miei "nuovi" oggetti.
Dimenticavo di dire che si parla di SQL Server 2008, ma anche nel 2005 sono presenti. La loro vera funzionalità principale è quella di puntare anche ad altri database/server linkati, ma io li ho usati per creare questo livello in più, come se il mio database fosse stato completamente rinominato negli oggetti (per ora solo le tabelle, l'unità più sensibile nel mio caso).

In SQL Server 2008, come molti di voi avranno potuto notare, esiste la funzionalità di intellisense. Per i più, scomoda (sono dello stesso parere), ma in questo caso, avendo ereditato il sistema da altri sviluppatori e non conoscendolo bene, può tornare utile per mostrare i campi delle tabelle che si stanno utilizzando.
Ma cosa c'entrano i sinonimi con l'intellisense? Ebbene, purtroppo tra sinonimi ed intellisense non c'è buon rapporto. Sembra un bug conclamato.
Il problema, non sta nel fatto che l'intellisense non funziona coi sinonimi poichè per alcune sintassi, come per il t-sql degli indici ad esempio, già non è supportato ed un messaggio lo indica.
Coi sinonimi il problema è più pesante. Per il compilatore a design time i sinonimi proprio NON ESISTONO. E vengono sottolineati come errori! guardate qui con SSMS 2008 cosa succede:


--

--


Fin qui tutto ok, adesso aggiungo il sinonimo:


Come potete notare, tutto sottolineato, errore? No, perchè se eseguite lo script, tutto funziona alla perfezione. Provatelo voi stessi:

USE tempdb;

GO

 

CREATE TABLE dbo.tabella

(

        id int NOT NULL PRIMARY KEY CLUSTERED

      , descrizione varchar(30) NOT NULL

)

GO

 

INSERT INTO dbo.tabella (descrizione, id)

VALUES ('prova', 1)

GO

 

SELECT

      descrizione

      , id

FROM

      dbo.tabella

GO

 

 

CREATE SYNONYM dbo.syn_tabella FOR dbo.tabella;

GO

 

SELECT

      descrizione

      , id

FROM

      dbo.syn_tabella

GO

     

DROP TABLE dbo.tabella

DROP SYNONYM dbo.syn_tabella


Vedrete che la select del sinonimo vi restituirà un errore ma il risultato sarà quello sperato. Bug, niente da fare.
Speriamo qualche amico in Microsoft mi faccia la correzione.. Altrimenti non è poi così comodo usare i sinonimi con l'intellisense. Se lo si disattiva, l'errore scompare.
Voi potete immaginare, dopo aver fatto il livello di n decine di sinonimi, cosa significa scrivere query in cui le tabelle puntate hanno campi di cui non si conosce il nome. E l'intelliSense proprio non appare. Subito ho pensato a problemi di cache, premo CTRL-SHIFT-R, aggiorno i metadati.. niente. Sigh sob.. triste .

Stay Tuned!

Categoria: Transact-SQL
giovedì, 16 lug 2009 Ore. 01.40
Statistiche
  • Views Home Page: 479.125
  • Views Posts: 864.537
  • Views Gallerie: 498.859
  • n° Posts: 484
  • n° Commenti: 273



















Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003