Domanda

Considera la seguente tabella:

Le persone

  • FirstName Nvarchar (50)
  • LastName Nvarchar (50)

Supponiamo per il momento in cui questa tabella abbia un indice full-text su entrambe le colonne.

Supponiamo che volessi trovare tutte le persone chiamate "John Smith" in questo tavolo. La seguente domanda sembra un modo perfettamente razionale per raggiungere questo obiettivo:

SELECT * from People p
INNER JOIN CONTAINSTABLE(People,*,'"John*" AND "Smith*"')

Sfortunatamente, questo non restituirà risultati, supponendo che non vi siano record nel Le persone Tabella che contiene sia "John" che "Smith" nelle colonne FirstName o LastName. Non corrisponderà a un record con "John" nella colonna FirstName e "Smith" nella colonna LastName o viceversa.

La mia domanda è questa: come si fa a realizzare ciò che sto cercando di fare sopra? Si prega di considerare che l'esempio sopra è semplificato. La vera tabella con cui sto lavorando ha dieci colonne e l'input che sto ricevendo è una singola stringa che è divisa in base agli interruttori di parole standard (spazio, dash, ecc.)

È stato utile?

Soluzione 2

Ecco cosa ho finito per fare:

L'esempio che ho dato sopra avrebbe potuto essere un po 'semplificato. Nell'applicazione effettiva, l'indice full-text è in realtà su una vista che rappresenta un join di due tabelle. Un vantaggio di questo è che lo schema della vista può essere indipendente dalla tabella da cui è costruito.

Per usare il mio esempio (semplificato) dall'alto, ho una tabella che assomiglia a questo:

Le persone

  • FirstName Nvarchar (50)
  • LastName Nvarchar (50)

La vista, da cui l'indice è effettivamente costruito, sembrava così:

Peopleview

  • FirstName Nvarchar (50)
  • LastName Nvarchar (50)

Per aggirare il problema, ho modificato lo schema della vista in modo che ora esista una singola colonna (più una chiave) che contiene il contenuto dell'intera tabella rappresentata dalla vista:

Peopleview

  • Nome (FirstName + '' + LastName)

Il catalogo full-text doveva essere ricostruito, ovviamente, tenendo conto del nuovo schema della vista, ma tutte le modifiche sono state apportate a livello di database, il che significava modifiche al codice dell'applicazione. Ho dovuto apportare alcune regolazioni alla vista per gestire colonne che potrebbero avere valori nulli, poiché null concatenati con qualsiasi cosa = null.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top