in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

VARIABILE al posto del LINKED_SERVER

Last post 11-13-2007 10.24 by dmauri. 13 replies.
Page 1 of 1 (14 items)
Sort Posts: Previous Next
  • 11-08-2007 9.36

    VARIABILE al posto del LINKED_SERVER

    Ciao a tutti.
    Ho un piccolo problema...

    Sto facendo delle stored procedure che devo replicare per diversi linked server.

    Vorrei fare un qualcosa di uniforme, parametrizzando tra le altre cose anche il nome del linked server.
    Se faccio una cosa del tipo:

    declare @linkname varchar(50)
    set @linkname = 'LINK_SRV01'

    select * from @linkname.database.dbo.tabella_che_te_pare

    OVVIAMENTE il mio caro SQL 2005 si innervosisce ed, al posto del messaggio di errore

    Msg 102, Level 15, State 1, Line 7
    Incorrect syntax near '.'.

    Mi fa spuntare la faccia del nostro AmatoPresidenteDavideMauri che mi guarda sconvolto e mi addita dandomi del beone!

    E' possibile in qualche modo parametrizzare la clausola FROM?

    E' possibile in qualche modo che non sia il cablare TUTTO dentro ad una variabile e poi eseguire tale variabile?

    Grazie in anticipo all'anima pia che mi risolvera' questo problema (ammesso che si possa risolvere).

    Ciao
    Ale

    Filed under: ,
    • Post Points: 20
  • 11-08-2007 10.32 In reply to

    • lbenaglia
    • Top 25 Contributor
      Male
    • Joined on 05-14-2007
    • Vimercate (Milano)
    • Posts 88
    • Points 1.335

    Re: VARIABILE al posto del LINKED_SERVER

    locuratropical:

    E' possibile in qualche modo parametrizzare la clausola FROM?

    No Smile 

    locuratropical:

    E' possibile in qualche modo che non sia il cablare TUTTO dentro ad una variabile e poi eseguire tale variabile?

    Puoi procedere proprio in questo modo, componendo una stringa contenente il comando SQL completo ed eseguirla mediante EXEC.
    Questo procedimento è altamente sconsigliato in quanto può dare origine a tutta una serie di inconvenienti che trovi descritti in questo articolo di Erland.
    Se si tratta di un task amministrativo, tappati il naso e vai avanti, ma eviterei di adottare una tecnica simile in una applicazione.

    Ciao!

    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://italy.mvps.org
    Filed under:
    • Post Points: 20
  • 11-08-2007 10.50 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    Aspettavo trepidante, interessato e pessimista la risposta al quesito... Purtroppo e' arrivata come temevo.. SIGHT il giorno che il nostro amato TSQL ci consentira' di parametrizzare le tabelle da cui fare la select sara' sempre un po' troppo tardi Sad

    Franco

    Franco Pigoli
    Consulente IT ( .Net, SAS, SqlServer) & Analisi dati
    MCTS Sql2005
    • Post Points: 20
  • 11-08-2007 11.41 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    CHE PALLE!

    Mi viene il vomito al solo pensiero di dover fare copia e incolla quel centinaio di volte...

    AHHHHHH ma lo fotto io...
    SISI... CYGWIN e si scripta tutto!

    Ma che palleeeee!

    Dovro' continuare a vedere il faccione di Davide che mi prende in giro! GRRRRR!!!!!

    :D :D :D :D

    Ciao
    Ale

    • Post Points: 20
  • 11-08-2007 11.44 In reply to

    • lbenaglia
    • Top 25 Contributor
      Male
    • Joined on 05-14-2007
    • Vimercate (Milano)
    • Posts 88
    • Points 1.335

    Re: VARIABILE al posto del LINKED_SERVER

    locuratropical:

    CHE PALLE!

    Mi viene il vomito al solo pensiero di dover fare copia e incolla quel centinaio di volte...

    Non conosco i dettagli del problema, ma io spessissimo mi autogeneraro i comandi che mi servono via SELECT...

    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://italy.mvps.org
    • Post Points: 20
  • 11-08-2007 11.48 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    Si anche io Lore...

    il casino sara' manutenere tutte ste procedure se cambio una virgola....

    mi porro' il problema al momento...

    per ora SCRIPTSCRIPTSCRIPT....

    Grazie per la conferma cmq...

    Ale

    • Post Points: 20
  • 11-08-2007 16.15 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: VARIABILE al posto del LINKED_SERVER

    Ciao Ale

    io per risolvere questi problemi con SQL Server 2005 uso i SYNONYMS.

    EXEC sp_addlinkedserver Server_Remote;
    GO
    USE tempdb;
    GO
    CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
    GO

    a questo punto nelle tue stored procedure tu farai riferimento a dbo.MyEmployee.

    In questo modo se devi cambiare linked server devi solo cambiare il sinonimo e non tutte le SP in cui usi la tabella remota. Smile 

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 35
  • 11-08-2007 22.39 In reply to

    • lbenaglia
    • Top 25 Contributor
      Male
    • Joined on 05-14-2007
    • Vimercate (Milano)
    • Posts 88
    • Points 1.335

    Re: VARIABILE al posto del LINKED_SERVER

    dmauri:

    io per risolvere questi problemi con SQL Server 2005 uso i SYNONYMS.

    EXEC sp_addlinkedserver Server_Remote;
    GO
    USE tempdb;
    GO
    CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
    GO

    a questo punto nelle tue stored procedure tu farai riferimento a dbo.MyEmployee.

    Grazie Davide,

    Finalmente ho capito a cosa servono i SYNONYMS Big Smile

    Ciao!

    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://italy.mvps.org
    Filed under:
    • Post Points: 5
  • 11-08-2007 23.50 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    dmauri:
    CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
    GO

    a questo punto nelle tue stored procedure tu farai riferimento a dbo.MyEmployee.

    Che figata !!, anch'io non avevo capito come usare i sinonimi ... Cos'altro si puo' fare con loro ??

    Franco

    Franco Pigoli
    Consulente IT ( .Net, SAS, SqlServer) & Analisi dati
    MCTS Sql2005
    • Post Points: 20
  • 11-09-2007 8.25 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: VARIABILE al posto del LINKED_SERVER

    orsocurioso:
    Cos'altro si puo' fare con loro ??

    Non molto altro. Almeno, per ora li ho usati solo per risolvere questioni come quella sollevata da Ale, creando uno strato di astrazione che - sopratutto quando entrano i gioco i linked server - permette di evitare di modificare il codice di stored procedure, viste o query già esistenti.

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 11-12-2007 10.32 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    Belli sisi...

    se li devi usare su un esiguo numero di tabelle...
    Sto provando ora a vedere (si parla di OGGETTI e non di tabelle nel BOL) a "sinonimizzare" il DB:

    use tempdb
    CREATE SYNONYM PIPPOSYN FOR LINKED_SRV.AdventureWorks
    select * from LINKED_SRV.AdventureWorks.Person.Address --Funziona
    select * from dbo.PIPPOSYN.Person.Address --NON Funziona

    Vabbe' continuo dopo a lavorarci su.
    Ciao
    Ale

    • Post Points: 20
  • 11-12-2007 11.54 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

     

    scusa, ci provo (ne ho impostati alcuni sui miei db per evitare di dover referenziare tutte le volte un percorso completo:

    locuratropical:
    use tempdb
    CREATE SYNONYM PIPPOSYN FOR LINKED_SRV.AdventureWorks
    select * from LINKED_SRV.AdventureWorks.Person.Address --Funziona
    select * from dbo.PIPPOSYN.Person.Address --NON Funziona



    Potrei sbagliare ma il formato corretto dovrebbe essere:

    CREATE SYNONYM dbo.PIPPOSYN FOR LINKED_SRV.AdventureWorks

    quindi

    select * from PIPPOSYN.Person.Address

    ti dovrebbe funzionare

    Ciao

    Mauro 

    • Post Points: 20
  • 11-13-2007 9.05 In reply to

    Re: VARIABILE al posto del LINKED_SERVER

    Ciao Mauro...
    Nada de nada....

    CREATE SYNONYM [dbo].[PIPPOSYN] FOR [LINKED_SRV].[AdventureWorks]
    SELECT * from pipposyn.person.address --NADA
    SELECT * from dbo.pipposyn.person.address --NADA

    Vabbe' ci riprovo piu' tardi...
    (Cmq se lo attacchi ad una tabella funziona benissimo... e' sul db che non va...)

    Ciao
    Ale

    • Post Points: 20
  • 11-13-2007 10.24 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: VARIABILE al posto del LINKED_SERVER

    Ale i SYNONYM devono essere creati su un oggetto base:

    I BOL sono chiari in proposito: 

    "You can use synonyms in place of their referenced base object in several SQL statements and expression contexts. "

    Sui BOL cerca "Synonyms (Database Engine) " e vedrai che l'arcano verrà spiegato Smile

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 5
Page 1 of 1 (14 items)
(C) 2007 User Group Italiano di SQL Server