Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesQuerida comunidad,
Estoy creando un script SQL en el que utilizo tablas temporales en el servidor SQL. El script de ejemplo simplificado a continuación (que funciona bien en otros lugares) se ejecuta sin errores pero NO devuelve ningún dato (es decir, la tabla de datos JMP no aparece).
query= "
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
SELECT * FROM #tmpTable;
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query);
close database connection(dbc);
Mi siguiente iteración fue dividir la ejecución como se muestra a continuación; Este truco fue mencionado en algún hilo.
query1= "
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
";
query2= "
SELECT * FROM #tmpTable
DROP TABLE #tmpTable;
";
query3= "
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query1);
Execute SQL (dbc, query2, "Table");
Execute SQL (dbc, query3);
close database connection(dbc);
Ahora la ventana de registro de JMP captura mensajes del servidor SQL (sin datos devueltos): Nombre de objeto no válido #tmpTable y No se puede eliminar la tabla #tmpTable porque no existe.
Estoy ejecutando JMP16. Cualquier consejo es muy apreciado.
Acceso a los datosIngeniería de Calidad y ProcesosRe: Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesSET NOCOUNT ON es una opción realmente extraña.
¡Me alegro que funcionó para usted!
Re: Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesHola Bryan,
Tu solución NO CONFIGURAR CUENTA EN; ¡¡¡Funciona genial!!! Me sorprende lo fácil que fue la solución. He pasado bastante tiempo buscando la solución en varios foros e hilos, pero nadie ha sugerido ésta.
Muchas gracias;
janne
Re: Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesjane,
Si modifica su primer SQL a:
query= "SET NOCOUNT ON;
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
SELECT * FROM #tmpTable;
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query);
close database connection(dbc);
Deberías llevar la tabla a JMP.
La adición (en caso de que se haya perdido en el JSL) es:
NO CONFIGURAR CUENTA EN;
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-Bryan
Re: Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesHola Brian, gracias por señalar el hilo antiguo; de hecho muy relacionado. ¡Asunto fascinante!
Hice algunas depuraciones mirando los registros en el servidor SQL de prueba que establecí en mi computadora portátil. La primera nota es que la misma consulta (con tablas temporales o variables de tabla) ejecutada usando la misma conexión DNS/controlador ODBC en Excel funciona bien, pero no desde JMP. Al buscar el tráfico entrante al servidor, Excel envía la cadena de consulta tal como está (p. ej. SELECCIONAR * DE la tabla ) pero desde JMP, la consulta llega en formato:
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
Creo que la declaración SQL está empaquetada con elementos adicionales mediante el controlador ODBC. Especialmente el sistema procedimiento almacenado sp_prepexec parece ser el que está causando problemas. Puede o no estar relacionado con las comillas; Es difícil decir qué sucede realmente dentro de ese procedimiento.
Ok, es un problema con el controlador ODBC. Sin embargo, hasta donde sabemos, ODBC también permite la ejecución directa. Creo que esto es lo que pasa con Excel. ¿Podría ser posible esto también con JMP? Enlaces relacionados con la pareja a continuación:
https://techcommunity.microsoft.com/t5/datacat/watch-out-those-prepared-sql-statements/ba-p/305074
https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/direct-execution-odbc?view=sql-server-ver15
Re: Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesHola jannel,
Espero que no sea este viejo problema. Importar SQL usando una tabla temporal . Esperemos que alguien más en el foro haya usado tablas temporales de SQL Server más recientemente con JMP.
Brian Corcoran
Desarrollo JMP