Che cos'è una "query eterogenea"?


14

Ho ricevuto il seguente messaggio di errore relativo a una query SQL in esecuzione in un programma. T-SQL di SQL Server 2005.

Le query eterogenee richiedono l' impostazione delle opzioni ANSI_NULLSe ANSI_WARNINGSper la connessione. Ciò garantisce una semantica delle query coerente. Abilitare queste opzioni e quindi riemettere la query. (gravità 16)

Risolvere il problema è facile, impostato ANSI_NULLSe ANSI_WARNINGS ON, ma volevo sapere cos'è una query eterogenea. Una ricerca su Google fa apparire dozzine di risultati che mi dicono di impostare ANSI_NULLSe ANSI_WARNINGS, niente spiega il significato del termine. La query è:

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

Penso che ciò sia dovuto alla connessione a più motori di database in una query, poiché altrimenti non ho mai ricevuto questo errore.
"Eterogeneo" fa semplicemente riferimento all'interrogazione di due diversi motori di database in questo contesto?

Risposte:


8

"Eterogeneo" fa semplicemente riferimento all'interrogazione di due diversi motori di database in questo contesto?

Fondamentalmente sì. Una query "eterogenea" viene eseguita su un "server collegato eterogeneo". Tutte le query a questo server collegato saranno eterogenee.

E "eterogeneo" è un sottoinsieme di query distribuite

  • Dati distribuiti archiviati in più istanze di SQL Server.
  • Dati eterogenei archiviati in varie origini dati relazionali e non relazionali accessibili tramite un provider OLE DB.

Ma "eterogenei" spuntano di tanto in tanto:

Vedi collegamento dei server su MSDN

La capacità di inviare query, aggiornamenti, comandi e transazioni distribuiti su origini dati eterogenee in tutta l'azienda.

sp_addlinkedserver

Un server collegato consente l'accesso a query distribuite ed eterogenee su origini dati OLE DB.

E un esempio MSDN di query su Active Directory in "Unione di dati eterogenei"

E ancora MSDN "Replica eterogenea del database"


6

Per quanto ne so, sì.

Un problema che vedo con la tua query è che non hai modo di sapere quale riga tornerà dalla tua tabella collegata. Questo è solo un codice fittizio o la tua query è scritta in questo modo?


È un codice fittizio, c'è una singola colonna che sto recuperando da 40 database e salvando in una tabella di "report di stato" solo di quei valori.
Ben Brocka

1
Oh va bene. Volevo solo assicurarti che tu fossi consapevole che il valore che viene inserito in quella colonna su Srv.db.dbo.table potrebbe essere diverso a seconda della versione di SQL Server su cui stai eseguendo il codice. In particolare da SQL 2005 a SQL 2008 utilizzando il codice pubblicato otterrai un valore diverso.
mrdenny,

Ora mi hai interessato, qual è il potenziale problema, solo che non so quale riga singola sto ricevendo? La tabella ha una sola riga in questo caso, motivo per cui non c'è WHERE nella sottoquery.
Ben Brocka,

Se c'erano più righe nella tabella, con SQL 2005 ottieni la prima riga. Con SQL 2008 la nuova tabella otterrebbe la seconda riga. (Potrei averlo al
contrario

Mi sarebbe piaciuto un articolo di MS che spiegasse esattamente cosa fosse realmente una "query eterogenea", ma sembra che una cosa del genere non esista, quindi lo segnerò correttamente.
Ben Brocka,

1

Eterogeneo significa solo diverso. Quindi una query eterogenea si trova in un database e sta interrogando un database DIFFERENTE. Poiché i database sono diversi, si evince la possibilità che le impostazioni siano diverse, il che potrebbe causare risultati diversi da quelli previsti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.