none
donde esta el error del trigger RRS feed

  • Pregunta

  • Hola amigos del foro.

    veran estoy haciendo un trigger que me arroja el siguiente error y no logro saber el por que:

    Msg 207, Level 16, State 1, Procedure Ent-Users-Tarj, Line 19
    Invalid column name 'false'.
    Msg 207, Level 16, State 1, Procedure Ent-Users-Tarj, Line 19
    Invalid column name 'false'.

    mi código es el siguiente:

    ALTER TRIGGER [dbo].[Ent-Users-Tarj]
       ON  [dbo].[Impresas]
       AFTER insert
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
        declare @Nombre   as nvarchar(100)
        declare @Apellido as nvarchar(100)
        
        select @Nombre = Nombre, 
               @Apellido = Apellido           
        
        from inserted
        
        insert into Directory.dbo.Cardholder(Guid,FirstName,LastName,Status,ExpirationMode,ExpirationDuration,ActivationDate,AntipassbackExemption,ExtendedGrantTime)
        values(newid(),@Nombre,@Apellido,0,0,0,getdate(),false,false)    
        
    END

    las ultimas dos columnas de la tabla son de tipo (bit,notnull), pero por mas que cambio el false por un cero (0), me sigue sacando el mismo error, incluso trate metiendo los valores dentro de comillas simples obteniendo el mismo resultado.

    ya verifique que el nombre de las columnas que pongo en el insert sea exactamente igual al los que tiene la tabla.

    Alguno de ustedes ve en donde puede estar el problema o el error en su defecto?

    De antemano muchas gracias por la ayuda y el tiempo dedicado a mi problema.

    Saludos

    miércoles, 21 de noviembre de 2012 17:37

Respuestas

  • Hola.

    El problema está en que indicas <false> (sin comillas) y no <'false'> (con comilla simple). Al ponerlo sin las comillas simples, se interpreta como si fuera el nombre de una columna, que al no existir, arroja el error que indicaste en su momento.

    --INCORRECTO
    insert into Directory.dbo.Cardholder(Guid,FirstName,LastName,Status,ExpirationMode,ExpirationDuration,ActivationDate,AntipassbackExemption,ExtendedGrantTime)
        values(newid(),@Nombre,@Apellido,0,0,0,getdate(),false,false)  
    
    --CORRECTO
    insert into Directory.dbo.Cardholder(Guid,FirstName,LastName,Status,ExpirationMode,ExpirationDuration,ActivationDate,AntipassbackExemption,ExtendedGrantTime)
        values(newid(),@Nombre,@Apellido,0,0,0,getdate(),'false','false')  

    Recomiendo en cualquier caso emplear 0 y 1 para el manejo de campos bit. 


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 8 de diciembre de 2012 14:04
    Moderador

Todas las respuestas

  • Bueno hago la aclaración de que estoy trabajando en SQL express 2008 R2.
    miércoles, 21 de noviembre de 2012 17:42
  • Hola zidfrid23, has probado hacer el mismo INSERT fuera del trigger ?

    Te funciona correctamente ?

    SALUDOS!


    Sergio Sánchez Arias

    miércoles, 21 de noviembre de 2012 18:17
  • Hola sergio.

    Si ya lo intente pero me saca el mismo error, lo unico que cambia es la linea donde encuentra el error, lo demas es igual.

    miércoles, 21 de noviembre de 2012 18:31
  • Ok, entonces al parecer el problema es tu INSERT, yo estoy tratando de la siguiente manera sin problema alguno, observa : 

    declare @table table( id  int, campo1 bit, campo2 bit )
    
    insert into @table
    values( 1,0,1)
    
    select * from @table 
    
    insert into @table
    values( 1,'true','false')
    
    select * from @table 
    

    Si puedes regalarnos los scripts de creación de tu tabla... y también la función newid()...

    SALUDOS!


    Sergio Sánchez Arias

    miércoles, 21 de noviembre de 2012 18:36
  • Hola.

    El problema está en que indicas <false> (sin comillas) y no <'false'> (con comilla simple). Al ponerlo sin las comillas simples, se interpreta como si fuera el nombre de una columna, que al no existir, arroja el error que indicaste en su momento.

    --INCORRECTO
    insert into Directory.dbo.Cardholder(Guid,FirstName,LastName,Status,ExpirationMode,ExpirationDuration,ActivationDate,AntipassbackExemption,ExtendedGrantTime)
        values(newid(),@Nombre,@Apellido,0,0,0,getdate(),false,false)  
    
    --CORRECTO
    insert into Directory.dbo.Cardholder(Guid,FirstName,LastName,Status,ExpirationMode,ExpirationDuration,ActivationDate,AntipassbackExemption,ExtendedGrantTime)
        values(newid(),@Nombre,@Apellido,0,0,0,getdate(),'false','false')  

    Recomiendo en cualquier caso emplear 0 y 1 para el manejo de campos bit. 


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 8 de diciembre de 2012 14:04
    Moderador