none
Nvarchar en codicion IN RRS feed

  • Pregunta

  • Que tal como estan, les comento tengo SP el cual estoy enviando como parametro un string que contiene los ID's que necesito usar como condicion para hacer una consulta:

    DECLARE @Ids NVARCHAR(MAX) = '211,284,325';
    SELECT * FROM TABLE1
    WHERE Id IN(@Ids)

    Pero me muestra el error "Conversion failed when converting the varchar value '@Ids' to data type int", entiendo que tengo que usar valores INT en la condicion WHERE Id IN(211,284,325), pero estoy usando un NVARCHAR, por que es la forma que logro hacer un el string con N cantidad de valores que necesite en la consulta.

    Alguna idea que me pudieran orientar para poder resolver este detalle. 

    De antemano gracias por la ayuda, Saludos!!




    domingo, 11 de noviembre de 2018 23:04

Respuestas

  • Hola Eduardo Hinojosa:

    Para realizar esa acción puedes pasarle al procedure parametros tipo table.

    Te pongo un ejemplo

    /* creación del tipo */
    create type ejemploTable as table
    (
    id int
    );
    go
    /* creaciön de la tabla de ejemplo para ver funcionamiento */
    create table datosEjemplo (id int, valor char(1))
    go
    /*insercción de datos de ejemplo */
    insert datosEjemplo (id, valor) values (1,'a'),(2,'b'),(3,'c')
    go
    /* El procedure que recibe parametros tipo table*/
    create procedure dbo.spSelect(@valores ejemploTable READONLY)
    as
    select * from datosEjemplo D
    INNER JOIN @valores v on d.id= v.id /* Es una variable tipo table, por tanto puedo relacionarla como tal, o utilizarla en el where... o donde necesite */
    
    go
    declare @ej as ejemploTable; /* ejemplo creo una variable tipo ejemploTable */
    insert into  @ej (id) values (1),(3); /*inserto en ella dos valores */
    exec dbo.spSelect @ej; /*ejecuto el procedimiento con los dos valores */
    go
    

    Salida

    Uso de parámetros con valores de tabla:

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/use-table-valued-parameters-database-engine?view=sql-server-2017

    lunes, 12 de noviembre de 2018 6:34