2010-07-05 66 views
11

Recibí un error "No puedo usar texto, ntext o columnas de imagen en las tablas 'insert' y 'deleted'", ya que son ntext campos en la tabla original, he adjuntado un disparador a.No se pueden usar columnas text, ntext o image en las tablas 'insert' y 'deleted'

Aquí es una solución: http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html

Pero originales (no modificado) consulta es bastante compleja. ¿Qué debo escribir en lugar de SELECT * FROM INSERTED, utilizando el operador JOIN, tal como se recomienda?

+0

¿Qué es lo que quiere hacer? ¿Puede mostrarnos su desencadenante (al menos las partes más relevantes)? Su pregunta no es muy clara .... –

+0

Estoy tratando de insertar filas dentro de mi desencadenador. Si ejecuto la consulta "SELECCIONAR * DESDE INSERTADO", aparece el mensaje "No se pueden usar texto, ntext o columnas de imagen en el error" Insertar "y" Tablas eliminadas ". Sé por qué: porque la tabla original contiene el campo ntext. ¿Cómo debo modificar mi consulta para solucionar esto? – noober

+0

@noober, sin que muestres ningún SQL, todo lo que alguien puede decir es simplemente implementar lo que has publicado en tu enlace. –

Respuesta

8

Una buena solución se ha encontrado:

  1. SELECT insertados (se está ejecutando no es ntext o imagen y consulta) acaba la columna ID.
  2. SELECCIONE de la tabla original * con los mismos identificadores.
  3. Si es necesario, use ACTUALIZADO() en INSERTAR para saber qué columnas se han cambiado.
+3

Esta no es una solución tan buena. Si bien funciona bien con la tabla insertada, con la tabla eliminada este enfoque es incorrecto ya que recibirá los valores después de la actualización, no antes de la actualización. – buhtla

13

El problema real es que está tratando de seleccionar columnas en su tabla insertada que sean del tipo ntext, texto o imagen. Esto no está permitido en un disparador.

La solución real sería cambiar todo su ntext, nvarchar (max), texto a varchar (max) e imagen a varbinary (max) como lo sugiere MS.

MS indica que esos tipos están en desuso y se eliminarán en la versión futura.

Además, ntext es muy lento ya que no hay datos en la fila.

+4

LOL. Bueno, el problema más real es que MS nos dice "esos tipos están en desuso y se eliminarán en la versión futura, bla-bla-bla", pero ellos los usan por sí solos. ¿Adivina dónde? En SharePoint DB. Y tengo que saber qué filas se cambian y qué campos se cambian a pesar de que los NTEXT se utilizan de forma amplia y activa para almacenar listas. Sé lo que dirás: "No uses DB directamente, utiliza OM en su lugar". Por favor, no lo hagas Estuve explorando el horrible OM durante todo el año pasado durante varios proyectos, el rendimiento y el conjunto de características que quiero están disponibles solo en el nivel DB. – noober

0

Usar la siguiente gatillo después de inserción en yourtable:

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