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.