none
Procedimientos almacenados RRS feed

  • Pregunta

  • buenos días

    cuando coloco este procedimiento almacenado no me arroja datos

    CREATE PROCEDURE prueba

    @Documento nvarchar

    AS

    BEGIN

    SELECT        Archivo.Codigo_Archivo, Archivo.Codigo_Dependencia, Archivo.Fecha_Envio, Archivo.Codigo_Documento, Archivo.Codigo_UC, Archivo.Fecha_Final, Archivo.Fecha_Inicial, Archivo.Area_Productora, Archivo.Descripcion,
                             Archivo.Documento_Identidad, Archivo.N_Caja, Archivo.N_Registro, Archivo.Cantidad, Archivo.Nombre_UDocumental, Usuarios.Nombre AS Nombre, Usuarios.Apellido AS Apellido, Dependencias.Descripcion AS Dependencia
    FROM            Archivo INNER JOIN
                             Dependencias ON Archivo.Codigo_Dependencia = Dependencias.Codigo_Dependencia INNER JOIN
                             Usuarios ON Archivo.Documento_Identidad = Usuarios.Documento_Identidad

    WHERE        (Archivo.Documento_Identidad = @Documento)

    END

    pero si le cambio el parámetro a int si funciona me pueden ayudar gracias

    lunes, 17 de febrero de 2020 16:28

Respuestas

  • Si la columna Archivo.Documento_Identidad es de tipo INT y @Documento es de tipo varchar, entonces sql server va a realizar una conversión implícita de tipo de dato para poder comparar el varchar con int. Hay que tener cuidado con estas cosas porque no siempre la conversión se hace como te esperas (por ejemplo, si hay ceros por la izquierda no da igual el string que un int). Es recomendable no mezclar tipos de datos por esta razón. Comprueba qué tipo tiene el Archivo.Documento_Identidad y asígnale al @Documento el mismo tipo. Y si ambos son varchar, cerciórate de que el varchar está escrito de la misma manera, por ejemplo, no vaya a ser que un tenga ceros a la izquierda y el otro no.
    • Propuesto como respuesta Diana AcuñaModerator lunes, 17 de febrero de 2020 18:09
    • Marcado como respuesta lagsing lunes, 17 de febrero de 2020 18:31
    lunes, 17 de febrero de 2020 17:27
  • Hola lagsing:

    Además de lo que ya te ha contado Alberto y si por casualidad la columna Document_identidad no es INT y es nVarchar, la variable @Documento tiene que tener definido un tamaño ya que si no por defecto le asignará un 1 y entonces puede no devolverte los datos deseados.

    DECLARE @DOCUMENTO NVARCHAR;
    
    SET @DOCUMENTO = N'1234567890'
    SELECT @DOCUMENTO

    Salida

    Cuando no se especifica el argumento n en una instrucción de definición de datos o de declaración de variable, la longitud predeterminada es 1.Cuando no se especifica n con la función CAST, la longitud predeterminada es 30.

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver15

    • Marcado como respuesta lagsing lunes, 17 de febrero de 2020 18:31
    lunes, 17 de febrero de 2020 18:17

Todas las respuestas

  • Si la columna Archivo.Documento_Identidad es de tipo INT y @Documento es de tipo varchar, entonces sql server va a realizar una conversión implícita de tipo de dato para poder comparar el varchar con int. Hay que tener cuidado con estas cosas porque no siempre la conversión se hace como te esperas (por ejemplo, si hay ceros por la izquierda no da igual el string que un int). Es recomendable no mezclar tipos de datos por esta razón. Comprueba qué tipo tiene el Archivo.Documento_Identidad y asígnale al @Documento el mismo tipo. Y si ambos son varchar, cerciórate de que el varchar está escrito de la misma manera, por ejemplo, no vaya a ser que un tenga ceros a la izquierda y el otro no.
    • Propuesto como respuesta Diana AcuñaModerator lunes, 17 de febrero de 2020 18:09
    • Marcado como respuesta lagsing lunes, 17 de febrero de 2020 18:31
    lunes, 17 de febrero de 2020 17:27
  • Hola lagsing:

    Además de lo que ya te ha contado Alberto y si por casualidad la columna Document_identidad no es INT y es nVarchar, la variable @Documento tiene que tener definido un tamaño ya que si no por defecto le asignará un 1 y entonces puede no devolverte los datos deseados.

    DECLARE @DOCUMENTO NVARCHAR;
    
    SET @DOCUMENTO = N'1234567890'
    SELECT @DOCUMENTO

    Salida

    Cuando no se especifica el argumento n en una instrucción de definición de datos o de declaración de variable, la longitud predeterminada es 1.Cuando no se especifica n con la función CAST, la longitud predeterminada es 30.

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver15

    • Marcado como respuesta lagsing lunes, 17 de febrero de 2020 18:31
    lunes, 17 de febrero de 2020 18:17