Linee guida per l'utilizzo di query distribuite

Se il provider supporta le interfacce OLE DB necessarie, è possibile utilizzare tutte le classi di istruzioni Transact-SQL indicate in questo argomento.

Istruzioni Transact-SQL

Di seguito è riportato un elenco dei subset del linguaggio Transact-SQL consentiti per le tabelle remote a cui si accede tramite nomi di server collegati o nomi ad hoc:

  • Sono consentite tutte le query formulate in base alla sintassi standard SELECT select_list clausola FROM clausola WHERE. La clausola INTO new_table_name dell'istruzione SELECT non è consentita se new_table_name fa riferimento a una tabella remota.

  • Nelle istruzioni SELECT, INSERT, UPDATE e DELETE non è consentito qualificare le colonne di tabelle remote con un nome di tabella composto da una o quattro parti. Alle tabelle remote deve essere assegnato un alias nella clausola FROM e il nome di alias deve essere utilizzato per qualificare il nome di colonna.

  • Non è possibile eseguire query su tabelle che contengono colonne xml, anche se la query accede alle colonne non xml della tabella.

  • Quando si specifica una colonna LOB (Large Object) di una tabella remota come un elemento di select_list di un'istruzione SELECT, tale istruzione non può includere una clausola ORDER BY.

  • I predicati IS NULL e IS NOT NULL non possono fare riferimento a colonne LOB di una tabella remota.

  • Non è possibile utilizzare l'istruzione GROUP BY ALL in una query distribuita che include una clausola WHERE. L'istruzione è supportata quando la clausola ALL viene omessa.

  • È possibile utilizzare le istruzioni INSERT su tabelle remote solo se il provider soddisfa i requisiti OLE DB relativi alle istruzioni INSERT. Per ulteriori informazioni, vedere Requisiti relativi all'istruzione INSERT per i provider OLE DB.

  • Non è possibile inserire costanti NULL in una colonna timestamp tramite una query distribuita.

  • $IDENTITY e $ROWGUIDCOL non sono supportate con le query distribuite. Non è possibile inserire valori espliciti nelle colonne Identity di tabelle remote.

  • È possibile utilizzare le istruzioni UPDATE e DELETE su tabelle remote solo se il provider soddisfa i requisiti dell'interfaccia OLE DB per la tabella specificata. Per ulteriori informazioni, vedere Requisiti relativi alle istruzioni UPDATE e DELETE per i provider OLE DB.

  • È possibile aggiornare o eliminare una tabella remota utilizzando un cursore definito in una query distribuita quando la tabella remota viene specificata nell'istruzione UPDATE o DELETE (UPDATE o DELETE remote_table WHERE CURRENT OF cursor_name) se il provider soddisfa le condizioni relative all'aggiornabilità della tabella remota. Per ulteriori informazioni, vedere Utilizzo di cursori con query distribuite.

  • Le istruzioni READTEXT, WRITETEXT e UPDATETEXT non sono supportate per le tabelle remote.

  • Nelle operazioni di aggiornamento o inserimento non è possibile fare riferimento a colonne contenenti dati di tipo LOB, ad esempio text, ntext o image se un'istanza del provider è in esecuzione all'esterno del processo di SQL Server, ovvero se l'opzione del processo AllowInProcess è impostata su 0. Per ulteriori informazioni, vedere Configurazione dei provider OLE DB per le query distribuite.

  • Le istruzioni DDL (Data Definition Language), ad esempio CREATE, ALTER o DROP, non sono consentite nei server collegati.

  • Un'istruzione EXECUTE può inviare un comando pass-through a un server collegato mediante la parola chiave AT. La possibilità di eseguire l'istruzione dipende dalla configurazione RPC del server collegato e dalla capacità del server collegato di eseguire l'istruzione stessa.

  • Nei server collegati non sono consentite altre operazioni o istruzioni a livello di database.

Altre linee guida

Di seguito sono riportate alcune restrizioni e linee guida aggiuntive:

  • I cursori STATIC o INSENSITIVE possono fare riferimento a tabelle remote. I cursori KEYSET possono fare riferimento a tabelle remote se il provider OLE DB soddisfa requisiti specifici. Per ulteriori informazioni su tali requisiti, vedere Requisiti relativi ai cursori gestiti da keyset per i provider OLE DB. Nessun altro tipo di cursore può fare riferimento a tabelle remote.

  • Le stored procedure sono supportate solo per le origini dei dati di SQL Server.

  • Una connessione è in grado di eseguire query distribuite solo se le relative opzioni ANSI_NULLS e ANSI_WARNINGS sono impostate su ON. Per ulteriori informazioni, vedere SET ANSI_DEFAULTS (Transact-SQL).

  • Per creare piani di query ottimali quando si utilizza una tabella in un server collegato, è necessario che Query Processor ottenga le statistiche di distribuzione dei dati dal server collegato. Gli utenti con autorizzazioni limitate per qualsiasi colonna della tabella potrebbero non disporre delle autorizzazioni sufficienti per ottenere tutte le statistiche utili, nonché ricevere un piano di query meno efficiente e riscontrare un peggioramento delle prestazioni. Se il server collegato è un'istanza di SQL Server, per ottenere tutte le statistiche disponibili l'utente deve essere il proprietario della tabella oppure un membro del ruolo predefinito del server sysadmin, del ruolo predefinito del database db_owner oppure del ruolo predefinito db_ddladmin nel server collegato.