Results 1 to 10 of 15

Thread: Poner parámetros a una consulta nativa desde una celda Excel

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Seeker Josue Alba's Avatar
    Join Date
    Jan 2022
    Posts
    8
    Articles
    0
    Excel Version
    2019

    Question Poner parámetros a una consulta nativa desde una celda Excel

    Buenas y Saludos a los miembros y visitantes del foro


    Tengo una Query para extrae determinados datos de una base de datos SQL Server por medio de una consulta nativa quisiera que alguien me ayudara a ponerle parámetros a esa consulta desde una celda de una hoja de Excel.

    Codigo Descripcion
    2332200125
    estos valores estan en una hoja de Excel



    aquÃ* solo pongo las partes de la Query que necesito quisiera que el valor de la celda código se convierta en el valor de la variable @ExistCod




    DECLARE @ExistCod Varchar(20) Set @ExistCod = '2332200125'






    SELECT
    prod.codigo AS Codigo,


    WHERE


    prod.codigo = @ExistCod


    Muchas Gracias de Antemano

  2. #2
    Administrator Ken Puls's Avatar
    Join Date
    Mar 2011
    Location
    Nanaimo, BC, Canada
    Posts
    2,492
    Articles
    43
    Blog Entries
    14
    Excel Version
    Excel Office 365 Insider
    Lo siento, no hablo español (estoy usando el traductor de Google), pero si entiendo correctamente, estás intentando pasar parámetros a SQL Server. Le recomiendo que eche un vistazo al artículo de Chris Webb aquí, ya que cubre cómo hacer esto correctamente con la función Value.NativeQuery(). ¡Buena suerte!
    Ken Puls, FCPA, FCMA, MS MVP

    Learn to Master Your Data at the Power Query Academy (the world's most comprehensive online Power Query training), with my book Master Your Data for Excel and Power BI, or our new Power Query Recipe cards!

    Main Site: http://www.excelguru.ca -||- Blog: http://www.excelguru.ca/blog -||- Forums: http://www.excelguru.ca/forums
    Check out the Excelguru Facebook Fan Page -||- Follow Me on Twitter

    If you've been given VBA code (a macro) for your solution, but don't know where to put it, CLICK HERE.

  3. #3
    Seeker Josue Alba's Avatar
    Join Date
    Jan 2022
    Posts
    8
    Articles
    0
    Excel Version
    2019
    Buenas Tardes yo no hablo ingles y también uso el traductor de Google.
    El link al que me envías no contiene lo que estoy tratando de hacer.

    Lo que quisiera hacer es que la query que estoy ejecutando en una consulta nativa me extraiga los datos que le pido desde una celda de una hoja de Excel.
    Si pudiera ayudarme se lo agradecería he buscado mucho y no encuentro la forma de hacerlo.

  4. #4
    Administrator Ken Puls's Avatar
    Join Date
    Mar 2011
    Location
    Nanaimo, BC, Canada
    Posts
    2,492
    Articles
    43
    Blog Entries
    14
    Excel Version
    Excel Office 365 Insider
    Para ser honesto, creo que el concepto en ese artículo es exactamente lo que necesitas. Aquí está el marco general que construí aquí:

    1) Cree una consulta que se conecte a la raíz de la base de datos. En el libro adjunto, el mío se llama "Database". Para crearlo, me conecté a mi base de datos SQL de Azure, seleccioné una tabla y, a continuación, eliminé el paso "Navegación". Luego cargué eso como una consulta de "Solo conexión".

    2) Creé mi consulta SQL personalizada en una celda de tabla de Excel. Observe que también agregué un número QueryID, ya que esto es importante para profundizar para obtener una consulta "Escalar" que se trata como texto, en lugar de una tabla. Una vez que extraje esa tabla en Power Query, filtré la consulta al QueryID correcto, eliminé la columna QueryID, luego hice clic con el botón secundario en el texto SQL y elegí profundizar.

    3) Finalmente, construí la consulta para usar la función Value.NativeQuery(). Para hacer esto, hice clic derecho en la consulta "Base de datos" y elegí Hacer referencia a ella (no Duplicar). Luego hice clic en el botón fx junto a la barra de fórmulas para obtener un nuevo paso. Para ese paso, utilicé la siguiente fórmula:
    Code:
    Value.NativeQuery(Database,SQLQuery)
    Tenga en cuenta que deberá establecer los niveles de privacidad de sus orígenes de datos de manera coherente (usé Organización tanto para el libro como para la base de datos), así como decirle a Excel que aprueba la consulta de base de datos nativa para ejecutarse. Pero en ese punto, siempre que su consulta SQL sea válida, debería funcionar sin presionar el firewall de fórmulas.

    Si desea probar esto, puede usar la base de datos que proporcionamos como muestra para mi libro. Puede encontrar esas credenciales cerca de la parte inferior de esta página.

    ¡Espero que esto ayude!
    Attached Files Attached Files
    Ken Puls, FCPA, FCMA, MS MVP

    Learn to Master Your Data at the Power Query Academy (the world's most comprehensive online Power Query training), with my book Master Your Data for Excel and Power BI, or our new Power Query Recipe cards!

    Main Site: http://www.excelguru.ca -||- Blog: http://www.excelguru.ca/blog -||- Forums: http://www.excelguru.ca/forums
    Check out the Excelguru Facebook Fan Page -||- Follow Me on Twitter

    If you've been given VBA code (a macro) for your solution, but don't know where to put it, CLICK HERE.

  5. #5
    Seeker Josue Alba's Avatar
    Join Date
    Jan 2022
    Posts
    8
    Articles
    0
    Excel Version
    2019
    Buenas tardes perdone tanta molestia

    La query que tengo es la siguiente y esta en una consulta nativa quisiera algo como lo que me envió pero no con la Query sino solo con un valor o parámetro.

    Código
    2252010010
    este de arriba seria el valor a buscar

    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER OFF


    DECLARE @ExistCod Varchar(20) Set @ExistCod = ((((( AQUI ES DONDE QUIERO PONER EL VALOR DE LA CELDA QUE ESTA EN LA HOJA DE EXCEL)))))






    SELECT
    prod.codigo AS Codigo,
    prod.descripcion AS "Descripcion del Producto",


    alm.codigo AS "Codigo Almacen",
    alm.nombre AS "Nombre Almacen",
    cat.nombre AS "Categoria",


    umed.clave AS "Um",
    umed.descripcion AS "Unidad Medida",
    almdoc.fecha AS "Fecha",


    ex.cantidad,
    ISNULL( exres.cantidad, 0 ) AS "Reserva",
    ex.importemn AS "Importe CUP",


    ex.importemlc AS "Importe CUC",
    uc.nombre AS "Nombre Unidad",
    uc.codigo AS "Codigo Unidad"


    FROM
    inv_existencia ex
    LEFT JOIN inv_existenciareserva exres ON exres.idexistencia = ex.idexistencia


    INNER JOIN gen_medida umed ON umed.idmedida = ex.idmedida
    INNER JOIN inv_categoria cat ON cat.idcategoria = ex.idcategoria


    INNER JOIN gen_producto prod ON prod.idproducto = ex.idproducto
    INNER JOIN inv_existenciaalm exalm ON exalm.idexistencia = ex.idexistencia


    INNER JOIN gen_almacen alm ON alm.idalmacen = exalm.idalmacen
    INNER JOIN gen_unidadcontable uc ON uc.idunidad = alm.idunidad


    INNER JOIN (
    SELECT
    daml.idalmacen,
    MAX ( idoc.fecha ) AS Fecha
    FROM


    inv_documentoalm daml
    INNER JOIN inv_documento idoc ON idoc.iddocumento = daml.iddocumento
    GROUP BY


    daml.idalmacen
    ) almdoc ON almdoc.idalmacen = exalm.idalmacen
    WHERE
    uc.activo = 1


    AND alm.activo = 1
    AND prod.activo = 1
    AND ex.cantidad > 0
    AND prod.codigo = @ExistCod
    ORDER BY


    "Codigo Almacen" ASC,
    codigo ASC

    Por favor perdone mi falta de conocimiento y muchas gracias

  6. #6
    Administrator Ken Puls's Avatar
    Join Date
    Mar 2011
    Location
    Nanaimo, BC, Canada
    Posts
    2,492
    Articles
    43
    Blog Entries
    14
    Excel Version
    Excel Office 365 Insider
    Hola Josue, entiendo lo que estás tratando de hacer aquí, pero mi consejo será crear toda la consulta usando una fórmula de Excel, luego pasarla a la función Value.NativeQuery(). Si intenta hacer esto de manera diferente, violará el firewall. Ya es bastante difícil resolver esos problemas en inglés, y mucho menos cuando estamos tratando de conversar a través de Google Translate.

    Echa un vistazo a lo que hice en el archivo que he adjuntado a esta publicación. Observe cómo cambié mi tabla para dividir el SQL en pedazos. Esto es lo que te sugiero que hagas en tu mesa. A continuación, vuelva a armarlo para ver la consulta completa en la primera columna de mi tabla. (Simplemente no olvide poner un espacio entre los componentes a los que desea unirse).



    También he añadido otra hoja de cálculo al archivo, donde he desglosado su consulta como quiera (una celda para cada parte de la consulta). Eso me permite usar fórmulas para completar la línea DECLARE correctamente, y luego puedo volver a juntarla toda con una fórmula TEXTJOIN en una tabla. Verá la tabla en la parte superior y los componentes debajo de eso.


    Una cosa a tener en cuenta... si su columna en SQL es texto, es posible que también deba ajustar la línea declare para agregar caracteres alrededor del código. Para ello, establezca la fórmula en C11 para que diga lo siguiente:

    Code:
    ="DECLARE @ExistCod Varchar(20) Set @ExistCod = '"&C9&"'"
    También querrá tener en cuenta que, en la función TEXTJOIN, el delimitador que utiliza es un salto de línea (es decir, el CHAR(10) ), seguido de un espacio. Esto es solo para asegurarse de que la instrucción SQL siga siendo válida.

    Sé que parece extraño hacerlo en la tabla de Excel, pero sugerirá que este es el mejor lugar para hacerlo. Si tiene la mayor parte de su SQL en Power Query, podrá combinar las columnas para compilar la consulta, pero esto es mucho más fácil de mover a la función Value.NativeQuery() en mi opinión.

    Y recuerde que, si es necesario, puede copiar la celda de la tabla y pegarla en SQL Server para verificar que el SQL se forma correctamente.
    Attached Files Attached Files
    Ken Puls, FCPA, FCMA, MS MVP

    Learn to Master Your Data at the Power Query Academy (the world's most comprehensive online Power Query training), with my book Master Your Data for Excel and Power BI, or our new Power Query Recipe cards!

    Main Site: http://www.excelguru.ca -||- Blog: http://www.excelguru.ca/blog -||- Forums: http://www.excelguru.ca/forums
    Check out the Excelguru Facebook Fan Page -||- Follow Me on Twitter

    If you've been given VBA code (a macro) for your solution, but don't know where to put it, CLICK HERE.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •