Consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesEstimada 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 de la siguiente manera; 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 descartar la tabla #tmpTable porque no existe.
Estoy ejecutando JMP16. Cualquier consejo es muy apreciado.
Tabla de datossecuencias de comandosRe: consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesHola Jannel,
Espero que no sea este viejo problema. https://community.jmp.com/t5/Discussions/Importing-SQL-using-a-temp-table/mp/11760#M11264 . Con suerte, alguien más en el foro ha usado tablas temporales de SQL Server más recientemente con JMP.
Brian Corcorán
Desarrollo JMP
Re: consulta SQL a fuente de datos ODBC/servidor SQL con tablas temporalesHola Brian, gracias por señalar el viejo hilo; de hecho muy relacionado. Tema fascinante!
Hice algo de depuración mirando los registros en el SQL Server 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 mirar 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á envuelta con cosas adicionales por el controlador ODBC. especialmente el sistema procedimiento almacenado sp_prepexec parece ser el que causa problemas. Puede o no estar relacionado con las comillas; difícil decir qué sucede realmente dentro de ese procedimiento.
Ok, es un problema del controlador ODBC. Sin embargo, hasta donde se sabe, ODBC también permite la ejecución directa. Creo que esto es lo que sucede con Excel. ¿Podría ser esto mismo posible también con JMP? Un par de enlaces relacionados 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 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);
Debe obtener la tabla en JMP.
La adición (en caso de que se haya perdido en el JSL) es:
ESTABLECER SIN 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 Bryan,
Tu solución ESTABLECER SIN CUENTA EN; ¡¡¡Funciona genial!!! Me sorprende lo fácil que fue la solución. Pasé bastante tiempo buscando la solución en varios foros e hilos, pero nadie me sugirió esta.
Muchas gracias;
jane