es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de cambiar automáticamente la tabla en la que se ejecuta mi consulta?

SET @UserID = 21077;
SELECT * FROM DATA.tbl_7 where UserID = @UserID

Actualmente, los datos de usuario están separados según el número con el que terminan. Por ejemplo, si termina en 1, tengo que ejecutar mi consulta en DATA.tbl_1, lo que significa que cada vez que quiera ejecutar una consulta en cada número de ID de usuario, tengo que cambiar las líneas de mi consulta. Por ejemplo, si quiero buscar el ID de usuario 21079

SET @UserID = 21079;
SELECT * FROM DATA.tbl_9 where UserID = @UserID

Cambiar “tbl_#” todo el tiempo realmente me molesta.

He intentado

SET @UserID = 21079;
SET @UserIDTABLELOOKUP = (SELECT RIGHT(@UserID, 1));
SELECT * FROM DATA.tbl_ (@UserIDTABLELOOKUP) where UserID = @UserID;

pero no funciona por razones obvias.
¿Habría alguna manera de establecer qué tabla de datos seleccionar en “Select * From” según el UserID que establezco?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar SQL dinámico para lograr esto. Aquí tienes un ejemplo:

    SET @UserID = 21079;
    SET @TableName = CONCAT('tbl_', RIGHT(@UserID, 1));
    SET @SQL = CONCAT('SELECT * FROM DATA.', @TableName, ' WHERE UserID = ', @UserID);
    PREPARE stmt FROM @SQL;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    En este ejemplo, usamos CONCAT para construir dinámicamente el nombre de la tabla basado en el ID del usuario. Luego, construimos una declaración SQL utilizando el nombre de tabla construido y el ID del usuario. Finalmente, utilizamos la instrucción PREPARE para preparar la declaración SQL, luego la ejecutamos con EXECUTE y la desasignamos con DEALLOCATE posteriormente.

    De esta manera, puedes establecer el ID del usuario una vez y la declaración SQL buscará dinámicamente el nombre de tabla correcto basado en el ID del usuario.

Comments are closed.