2010-07-05 12 views
11

Ho ricevuto un errore "Impossibile utilizzare le colonne text, ntext o image nelle tabelle" inserted "e" deleted ", poiché sono campi ntext nella tabella originale, a cui avevo associato un trigger.Impossibile utilizzare le colonne text, ntext o image nelle tabelle "inserted" e "cancellate"

Ecco una soluzione: http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html

Ma originale (non modificato) query è abbastanza complessa. Cosa dovrei scrivere invece di SELECT * FROM INSERTED, usando l'operatore JOIN, come raccomandato?

+0

Che cosa vuoi fare? Puoi mostrarci il tuo grilletto (almeno le parti più rilevanti di esso)? La tua domanda non è molto chiara ... –

+0

Sto cercando di inserire le righe nel mio trigger. Se eseguo la query "SELECT * FROM INSERTED", ottengo "Impossibile utilizzare le colonne text, ntext o image nelle tabelle" inserted "e" deleted "tables". So perché: perché la tabella originale contiene il campo ntext. Come dovrei modificare la mia ricerca per ovviare a questo? – noober

+0

@noober, senza che tu mostri alcun codice SQL, tutto quello che chiunque può dire è implementare semplicemente ciò che hai postato nel tuo link. –

risposta

8

Una bella soluzione è stata trovata:

  1. SELECT FROM inserito (è in corso di esecuzione non è NTEXT o immagine e query) appena colonna ID.
  2. SELEZIONA dalla tabella originale * con gli stessi ID.
  3. Se necessario, utilizzare UPDATED() su INSERTED per sapere quali colonne sono state modificate.
+3

Questa non è in realtà una soluzione così bella. Mentre funziona bene con la tabella inserita, con la tabella eliminata questo approccio è sbagliato poiché riceverai i valori dopo l'aggiornamento, non prima dell'aggiornamento. – buhtla

13

Il vero problema è che si sta tentando di selezionare le colonne nella tabella inserita che sono di tipo ntext, testo o immagine. Questo non è permesso in un trigger.

La soluzione reale sarebbe quella di modificare tutto il tuo ntext, in nvarchar (max), text in varchar (max) e image in varbinary (max) come suggerito da MS.

MS dichiara che questi tipi sono deprecati e verranno rimossi nella versione futura.

Inoltre, i ntext sono molto lenti come prestazioni poiché non ci sono dati in fila.

+4

LOL. Bene, il vero problema è che MS ci dice "quei tipi sono deprecati e saranno rimossi nella versione futura, bla-bla-bla", ma li usano da soli. Indovina dove? Nel database di SharePoint. E devo sapere, quali sono le righe modificate e quali campi vengono modificati nonostante gli NTEXT siano ampiamente e attivamente utilizzati per la memorizzazione delle liste. Lo so, cosa dirai: "Non usare DB direttamente, usa invece OM". Per favore, non farlo. Stavo esplorando l'orribile OM di tutto l'anno scorso durante diversi progetti, perfomance e set di funzionalità che desidero sono disponibili solo a livello di DB. – noober

0

Usare il seguente grilletto dopo inserto sul yourtable:

SELECT textfields 
FROM yourtable 
WHERE EXISTS (
    SELECT 1 
    FROM {inserted/deleted} 
    WHERE {inserted/deleted}.PK = {yourtable}.PK 
) 
Problemi correlati