none
Mens. 206, Nivel 16, Estado 2, Línea 4 Conflicto de tipos de operandos: int es incompatible con date RRS feed

  • Pregunta

  • Saludos a la comunidad.

    Soy un recién llegado tanto a esta comunidad como a el dominio de SQL Server 2014 y en el manejo de Transact-SQL.

    No soy profesional en el área así que actúo en calidad de aprendiz.

    Sin embargo y pese a mis esfuerzos y lo que he podido hasta ahora leer en MSDN no logro superar este problema cuando quiero introducir los primeros datos en una tabla creada, donde me da el error 206 y el Management Studio 2014 me dice " int es incompatible con date".

    ESTA ES LA TABLA CREADA Y SUS ATRIBUTOS

    OpNum int NOT NULL
    Fecha1 date NOT NULL
    NumRIF nchar(10) NOT NULL
    NombRazonSoc varchar(50) NOT NULL
    TipoDoc varchar(3)  NOT NULL
    NoDoc nvarchar(15) NOT NULL
    NoContrl nvarchar(15) NOT NULL
    TipoTrans numeric(2, 0) NOT NULL
    NoFactAfec nvarchar(15) NULL
    TotCompras12 decimal(10, 2) NULL
    TotCompras8 decimal(10, 2) NULL
    TotComprasImp decimal(10, 2) NULL
    TotComprasExen decimal(10, 2) NULL
    ComprasNet12 decimal(10, 2) NULL
    ComprasNet8 decimal(10, 2) NULL
    CrIVA12 decimal(10, 2) NULL
    CrIVA8 decimal(10, 2) NULL
    IVARet decimal(10, 2) NULL
    IVAPorctRet decimal(10, 2) NULL
    IVAPercib decimal(10, 2) NULL
    NoComprobRetIVA nchar(15) NULL
    FechaComprobIVA date NULL

    cuando trato de introducir estos valores me da el error antes señalado:

    USE [DesdCompr]
    GO

    INSERT INTO dbo.ComprasIVA  (
               [OpNum],
               [Fecha1],
               [NumRIF],
               [NombRazonSoc],
               [TipoDoc],
               [NoDoc],
               [NoContrl],
               [TipoTrans],
               [NoFactAfec],
               [TotCompras12],
               [TotCompras8],
               [TotComprasImp],
               [TotComprasExen],
               [ComprasNet12],
               [ComprasNet8],
               [CrIVA12],
               [CrIVA8],
               [IVARet],
               [IVAPorctRet],
               [IVAPercib],
               [NoComprobRetIVA],
               [FechaComprobIVA] )
         VALUES
               (1,
    20062015,
     N'J12345689',
    'LA PRIMERA PRACTICA C.A.',
    'FAC',
              N'AA12365',
                N'AS12365',
                01,
    N'0',
                1000,
                0,
                0,
                0,
                880,
                N'0',
                120,
                0,
                120,
                12,
                880,
                0,
                20062015);
    GO

    Agradecerìa altamente la colaboraciòn para poder proseguir en mi auto aprendizaje y proseguir con asuntos mas complejos.

    CEscalona al 25/06/2016

    sábado, 25 de junio de 2016 17:34

Respuestas

  • CEscalona,

    Los valores que asignes a una columna deben guardar correspondencia con el tipo de dato definido (debe permitirse la conversión ímplicita), y veo que en la lista de elementos tienes varios casos donde infringes lo mencionado, lo marco en negrita para que tomes nota de ello:

    INSERT INTO dbo.ComprasIVA
           (...)
    VALUES (
    	1,
    	'20060215', /*Es correcto que hagas uso de un estandar para definir un valor de fecha pero debes encerrar el valor entre comillas simples*/
    	N'J12345689',
    	'LA PRIMERA PRACTICA C.A.',
    	'FAC',
    	N'AA12365',
            N'AS12365',
            1, /*01? Es un valor numérico, el cero a la izquierda no tiene representatividad*/
    	N'0',
            1000,
            0,
            0,
            0,
            880,
            0, /*Este valor es de tipo decimal, ¿por qué colocas una expresión de cadena (N'0')?*/
            120,
            0,
            120,
            12,
            880,
            N'0', /*Este valor es de tipo cadena, debes encerrar entre comillas simples*/
            '20060215' /*Es correcto que hagas uso de un estándar para definir un valor de fecha pero debes encerrar el valor entre comillas simples*/
    );
    GO

    • Editado Willams Morales sábado, 25 de junio de 2016 17:58
    • Propuesto como respuesta José De Alva jueves, 30 de junio de 2016 16:20
    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    sábado, 25 de junio de 2016 17:53
  • Buenos dias, en este Domingo 26 de Junio 2016:

    Ante todo: Muchísimas Gracias amigo Williams Morales.

    Si que me valiò tu amable y pronta respuesta-sugererencia.

    En todo caso, tanto para mì como para cualquier otra persona que le suceda:

    en mi maquina y bajo los parametros de funcionamiento del Microsoft SQL Server 2014 EXPRESS la COMBINACION que me funcionò es esta:

    '05-10-2007'

    es decir, a- poner todo entre apòstrofes '  b- poner formato DD-MM-AAA  

    anteriormente puse toda combinacion diferente y NO me funcionò, incluyendo apòstrofe- comillas p comillas-apostrofes o AAAA-MM-DD........ ninguna de estas funcionò (10 horas invertidas en este pequeño detalle...).

    Asì que GRACIAS MIL, de nuevo, amigo Wiliams

    Carlos Escalona

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    domingo, 26 de junio de 2016 12:23
  • CEscalona,

    //Ya vi que no puedo dejarlos en blanco. Asì que les puse cero.

    En caso una columna pueda permitir NULL, es necesario implementar dicha restricción. Insertar un valor 0 o un caracter de espacio vacío para representar un valor desconocido no es lo correcto. Si la columna permite NULL no debes colocar un 0 o un caracter de espacio vacío, debes colocar NULL. En caso la columna no tenga definido la restricción de opcionalidad puedes hacer lo siguiente:

    ALTER TABLE MiTabla ALTER COLUMN MiColumna int NULL;

    //Aun no domino esa parte de porquè hay que anteceder con N, en valores dados de nvarchar o de nchar

    Veo que usas los tipos nchar(n)/nvarchar(n), pues bien, se trata de tipos que representan datos según la página de códigos UNICODE, si intentas representar una cadena UNICODE debes anteponer el prefijo N, si lo omites la cadena se convierte según la página de códigos predeterminada de la base de datos, por lo que podrías perder ciertos caracteres por no pertenecer a la misma codificación.

    • Marcado como respuesta José De Alva jueves, 30 de junio de 2016 16:20
    domingo, 26 de junio de 2016 17:48
  • Ah, disculpa amigo Wiliams:

    las otras observaciones que me haces sobre valores en cero (0), es porque a los efectos de la validacion de esta prueba en el desarrollo de lo que quiero hacer, es necesario que esos valores estèn NULL.

    Ya vi que no puedo dejarlos en blanco. Asì que les puse cero.

    Esos valores pueden tomar entonces valores NULL y sus valores cuando los haya.

    Aun no domino esa parte de porquè hay que anteceder con N, en valores dados de nvarchar o de nchar.

    en todo caso con las correcciones que bien me ayudaste a superar ya la base de datos tiene sus primeros datos vàlidos.

    Saludos.

    Carlos Escalona 

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    domingo, 26 de junio de 2016 12:28
  • ah..... de nuevo y una vez, por tu absoluta amabilidad en orientarme......

    Ya.

    Pondré valor NULL en lugar de errado que ahora veo es poner cero.

    Mi super saludo y agradecimiento.

    Carlos Escalona.


    CREZ

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:47
    viernes, 1 de julio de 2016 11:47

Todas las respuestas

  • CEscalona,

    Los valores que asignes a una columna deben guardar correspondencia con el tipo de dato definido (debe permitirse la conversión ímplicita), y veo que en la lista de elementos tienes varios casos donde infringes lo mencionado, lo marco en negrita para que tomes nota de ello:

    INSERT INTO dbo.ComprasIVA
           (...)
    VALUES (
    	1,
    	'20060215', /*Es correcto que hagas uso de un estandar para definir un valor de fecha pero debes encerrar el valor entre comillas simples*/
    	N'J12345689',
    	'LA PRIMERA PRACTICA C.A.',
    	'FAC',
    	N'AA12365',
            N'AS12365',
            1, /*01? Es un valor numérico, el cero a la izquierda no tiene representatividad*/
    	N'0',
            1000,
            0,
            0,
            0,
            880,
            0, /*Este valor es de tipo decimal, ¿por qué colocas una expresión de cadena (N'0')?*/
            120,
            0,
            120,
            12,
            880,
            N'0', /*Este valor es de tipo cadena, debes encerrar entre comillas simples*/
            '20060215' /*Es correcto que hagas uso de un estándar para definir un valor de fecha pero debes encerrar el valor entre comillas simples*/
    );
    GO

    • Editado Willams Morales sábado, 25 de junio de 2016 17:58
    • Propuesto como respuesta José De Alva jueves, 30 de junio de 2016 16:20
    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    sábado, 25 de junio de 2016 17:53
  • Buenos dias, en este Domingo 26 de Junio 2016:

    Ante todo: Muchísimas Gracias amigo Williams Morales.

    Si que me valiò tu amable y pronta respuesta-sugererencia.

    En todo caso, tanto para mì como para cualquier otra persona que le suceda:

    en mi maquina y bajo los parametros de funcionamiento del Microsoft SQL Server 2014 EXPRESS la COMBINACION que me funcionò es esta:

    '05-10-2007'

    es decir, a- poner todo entre apòstrofes '  b- poner formato DD-MM-AAA  

    anteriormente puse toda combinacion diferente y NO me funcionò, incluyendo apòstrofe- comillas p comillas-apostrofes o AAAA-MM-DD........ ninguna de estas funcionò (10 horas invertidas en este pequeño detalle...).

    Asì que GRACIAS MIL, de nuevo, amigo Wiliams

    Carlos Escalona

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    domingo, 26 de junio de 2016 12:23
  • Ah, disculpa amigo Wiliams:

    las otras observaciones que me haces sobre valores en cero (0), es porque a los efectos de la validacion de esta prueba en el desarrollo de lo que quiero hacer, es necesario que esos valores estèn NULL.

    Ya vi que no puedo dejarlos en blanco. Asì que les puse cero.

    Esos valores pueden tomar entonces valores NULL y sus valores cuando los haya.

    Aun no domino esa parte de porquè hay que anteceder con N, en valores dados de nvarchar o de nchar.

    en todo caso con las correcciones que bien me ayudaste a superar ya la base de datos tiene sus primeros datos vàlidos.

    Saludos.

    Carlos Escalona 

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:43
    domingo, 26 de junio de 2016 12:28
  • CEscalona,

    //Ya vi que no puedo dejarlos en blanco. Asì que les puse cero.

    En caso una columna pueda permitir NULL, es necesario implementar dicha restricción. Insertar un valor 0 o un caracter de espacio vacío para representar un valor desconocido no es lo correcto. Si la columna permite NULL no debes colocar un 0 o un caracter de espacio vacío, debes colocar NULL. En caso la columna no tenga definido la restricción de opcionalidad puedes hacer lo siguiente:

    ALTER TABLE MiTabla ALTER COLUMN MiColumna int NULL;

    //Aun no domino esa parte de porquè hay que anteceder con N, en valores dados de nvarchar o de nchar

    Veo que usas los tipos nchar(n)/nvarchar(n), pues bien, se trata de tipos que representan datos según la página de códigos UNICODE, si intentas representar una cadena UNICODE debes anteponer el prefijo N, si lo omites la cadena se convierte según la página de códigos predeterminada de la base de datos, por lo que podrías perder ciertos caracteres por no pertenecer a la misma codificación.

    • Marcado como respuesta José De Alva jueves, 30 de junio de 2016 16:20
    domingo, 26 de junio de 2016 17:48
  • ah..... de nuevo y una vez, por tu absoluta amabilidad en orientarme......

    Ya.

    Pondré valor NULL en lugar de errado que ahora veo es poner cero.

    Mi super saludo y agradecimiento.

    Carlos Escalona.


    CREZ

    • Marcado como respuesta CEscalona viernes, 1 de julio de 2016 11:47
    viernes, 1 de julio de 2016 11:47