none
USO DE VARIABLES EN SQL SERVER 2012 RRS feed

  • Pregunta

  • Buen dia a todos, espero me pueda apoyar tengo la siguiente pregunta , 

    de que forma puedo usar una variable o parametro como lo quieran ver en sql en la cual pueda almacenar varios valores y poder utilizar esa variable dentro de un WHERE por ejemplo algo asi:

    DECLARE @variable INT
    set @variable = 4,5,7,9

    select *
    from Tabla where IDnumero in (@variable)

    solo es un ejemplo , lo que necesito es saber si puedo hacer algo asi ,porque necesito hacer un SP en el cual le quiero mandar varios valores y en base a esos valores sea lo que me filtre en un WHERE 

    espero haberme explicado bien , y alguien pueda orientarme

    Saludos

    miércoles, 3 de agosto de 2016 15:20

Respuestas

Todas las respuestas

  • Hola:

    Claro puede crear una variable con diferentes propósitos:

    • Como contadores, para contar el número de veces que se realiza un bucle o controlar cuántas veces debe ejecutarse.

    • Para contener un valor de datos que desea probar mediante una instrucción de control de flujo.

    • Para guardar el valor de un dato que se va a devolver en un código de retorno de un procedimiento almacenado o un valor devuelto de una función.

    Declara una variable

    DECLARE @MiVariable int;

    Inicializa una variable

    SET @MiVariable = 0;

    Luego puedes incrementar el valor

    SET @MiVariable = @MiVariable + 1;

    Esta instrucción declara tres variables locales con valores inicializados a NULL

    DECLARE @PrimerNombre nvarchar(30), @SegundoNombre nvarchar(20), @EstadoProvincia nchar(2);

    USE AdventureWorks2008R2;
    GO
    DECLARE @MiVariable int;
    SET @MiVariable = 1;
    -- Termina el batch usando la palabra clave GO.
    GO 
    
    SELECT BusinessEntityID, NationalIDNumber, JobTitle
    FROM HumanResources.Employee
    WHERE BusinessEntityID = @MiVariable;

    Es una de tantas formas como puedes utilizar las variables.

    Si te ha servido vota y marca como respuesta útil.

    Saludos,


    Miguel Torres



    miércoles, 3 de agosto de 2016 15:34
  • ujanM,

    Puedes implementar un parámetro con valores de tabla. Fíjate en el siguiente enlace, es bastante descriptivo:

    Using Table Valued Parameters (TVP)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 3 de agosto de 2016 15:34
  • gracias a todos por su apoyo : encontre algo que es una variable tipo tabla como lo menciona william este es el ejemplo que encontre

    declare @listOfIDs table (id int);
    insert @listOfIDs(id) values (114),(61),(140),(123),(69),(96); 

    select * from tabla where idnumero in (select *

    from @listOfIDs ) asi es como deseaba poder hacerlo aunque yo pense que se podia de otra forma ,

    el problema ahora es como enviar esos valores desde un programa externo digamos con c#

    miércoles, 3 de agosto de 2016 15:58
  • Hola 

    Pues consultar el siguiente artículo, allí están las instrucciones tanto par C# como para Visual Basic.

    https://msdn.microsoft.com/es-es/library/ms233812.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

    Saludos,


    Miguel Torres


    miércoles, 3 de agosto de 2016 16:07
  • ujanM,

    Debes definir una estructura que podría ser una lista, un objeto de tipo DataTable, etc., fíjate en el siguiente ejemplo:

    DataTable dt = dtOriginal.GetChanges(DataRowState.Added);
    
    SqlCommand cmd = new SqlCommand("MyStoredProcedure", cn);
    
    cmd.CommandType = CommandType.StoredProcedure;
    SqlParameter param = cmd.Parameters.AddWithValue("@param", dt);
    param.SqlDbType = SqlDbType.Structured;
    
    cmd.ExecuteNonQuery();


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 3 de agosto de 2016 16:21
  • encontre otra manera de poder almacenar la informacion , el problema aqui es que tendria que buscar una forma de convertir una cadena de texto a valores int separados por coma , algo asi

    declare @numero varchar(100)

    set @numero = '1,2,3,4,5,6'

    select *

    from tabla where idnumero in (@numero)

    el problema aqui es como hacer que esto  '1,2,3,4,5,6' se convierta en esto 1,2,3,4,5,6

    para que el query interprete en el where los valores como tipo INT y que estan separados por coma

    alguno tendria una idea ?

    miércoles, 3 de agosto de 2016 16:24
  • ujanM,

    Olvida esa forma, no es óptima a menos que cuentes con un motor SQL SERVER 2016 y puedas hacer uso de la función STRING_SPLIT, caso contrario sólo te traerá complicaciones. La manera más óptima es mediante parámetros con valores de tabla, te recomiendo que insistas en la revisión de ese punto y te animes a su implementación.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 3 de agosto de 2016 16:48
  • ok gracias , continuare con los valores de tabla 

    Saludos

    miércoles, 3 de agosto de 2016 17:18