Importar SQL usando una tabla temporal<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo dificultades para usar procedimientos almacenados y tablas temporales en JMP 11.2.1.Simplemente no obtengo retorno
db = Crear conexión de base de datos ("CONTROLADOR = SQL Server;
SERVIDOR=servidorlocal\SQLEXPRESS;
BASE DE DATOS=Prueba"
);
Ejecutar SQL(db,
"
CREAR TABLA #Prueba (ID int)
Insertar EN #Prueba (ID)
VALORES (1), (2), (3), (4), (5)
SELECCIONAR *
DE #Prueba
DROP TABLE #Prueba
",
":-("
);
cerrar la conexión de la base de datos (db);
Este problema me ha atormentado durante algún tiempo.Por lo que parece, SAS puede hacerlo, así que no creo que sea un problema con ODBC.
Re: Importar SQL usando una tabla temporalVicente,
Gracias.¿Tendría sentido buscar descargas de ODBC 2.0 anteriores?Todavía no he tenido mucha suerte.
Re: Importar SQL usando una tabla temporalTal como lo entendí, esto no está en el lado de JMP para solucionarlo.El problema está del lado de Microsoft en la forma en que lo llaman sus controladores para ODBC 3.0.Posiblemente podrían intentar detectar #Tables como dijiste, pero no creo que quiera interrumpir un script para decirme que mi SQL está escrito de una manera inaceptable.Sin embargo, al pasar algo al registro, pude ver que es útil.
Re: Importar SQL usando una tabla temporalMe di cuenta de que guardar los resultados de cada parte de la consulta como tablas de datos JMP literales y luego unirlos manualmente a través de JSL parece funcionar algunas veces.Sin embargo, realmente puede consumir su tiempo, pero podrá mantener los resultados activos hasta que ejecute una tabla de datos de cierre.
Re: Importar SQL usando una tabla temporalGracias por la explicación.Sin embargo, no me gusta cómo funciona esto.Yo debería simplemente ser capaz de tomar cualquier consulta que funcione bien en otras aplicaciones y ver/esperar el mismo resultado cuando se ejecuta dentro de JMP/JSL.
He leído este hilo y una cosa está clara ... la solución discutida, dividir todas las tablas temporales en consultas separadas, NO es una buena solución para nosotros, los desarrolladores de JSL.Tengo una consulta grande y antigua que funciona bien y literalmente me llevará horas dividirla.¿Cual es el punto de eso?¿Cómo es este el método preferido?También noté que en mi primer intento de división de consulta, JMP no está cargando OID en la nueva tabla de datos.Así que no estoy muy seguro de poder dividir esta consulta.Si continúo, no puedo unirme en una columna OID en blanco....Cuando ejecuto esta parte de consulta idéntica a través de SQL Server, mi columna tiene datos.
También me sorprendió que este tema fuera difícil para encontrarlo, tomó algunas búsquedas en Google.Las limitaciones deben estar claramente establecidas en el Manual JSL, pero este es el primero que lo leo.Escribí específicamente varias funciones de ayuda, que ahora no son muy útiles.Ahora me doy cuenta de que fue una pérdida de tiempo.En realidad, será más rápido para mí usar otra aplicación para escribir en csv y hacer que JMP la cargue.Este software no es barato, así que espero que Temp Tables/SQL funcione en JMP en lugar de necesitar una aplicación externa para ahorrarme tiempo.
Como mínimo, esperaría que esta aplicación tuviera mejores notificaciones.Si JMP detecta el uso de tablas temporales dentro de JSL o en la plataforma "Tabla abierta > Avanzada", tal vez un mensaje debería se enviará al desarrollador para informarle que JMP no puede manejar la operación...?
Este hilo ya no aparece activo... ¿Planea SAS/JMP arreglar esto?
Re: Importar SQL usando una tabla temporalPuede que no sea tu culpa.Hay un error en JMP 12 que hace que los procedimientos almacenados no devuelvan ninguna fila a JMP (francamente, no estoy seguro de cómo Brian consiguió que funcionara).Se solucionará en la versión de mantenimiento 12.1, que debería estar disponible en unos meses.
ACTUALIZAR : Estaba confundido.El error relacionado con los procedimientos almacenados que no devolvían ninguna fila en realidad *no* estaba en JMP 12: se introdujo y se solucionó dentro del ciclo JMP 12.1.Por lo tanto, es posible que deba mirar su código de procedimiento almacenado.Hemos visto escenarios en los que se crea una tabla y luego se selecciona desde dentro de un solo procedimiento almacenado donde las filas no se devuelven a JMP.
eric
Re: Importar SQL usando una tabla temporalGracias Brian, debo haber estado llamándolo mal.
Re: Importar SQL usando una tabla temporalHola Vicente,
No estoy al tanto de un problema con los procedimientos almacenados.Pude hacer que uno funcionara aquí, aunque no tenemos muchos buenos ejemplos en SQL Server.Sé que citar es un gran problema.¿Qué estas viendo?
Brian
Re: Importar SQL usando una tabla temporalGracias Brian, eso fue realmente informativo.
¿Es el mismo problema que posiblemente hace que los procedimientos almacenados también fallen?
Re: Importar SQL usando una tabla temporalHola Vicente,
Lamento la demora en la respuesta, pero quería investigar un poco sobre esto.Desafortunadamente, esto parece ser un problema con los controladores ODBC de Microsoft SQL Server (tanto en la versión de Native Client como en la de Office).La creación de la tabla falla silenciosamente cuando enviamos el SQL.Con un controlador como el controlador de SQL Server de Actual Technologies para Mac, esto funciona perfectamente.Sé que en versiones anteriores de JMP esto funcionaría, porque en ese momento no estábamos implementando ODBC 3.0. Este nivel es necesario para utilizar la obtención de bloques en SQL Server y otros proveedores de bases de datos.La recuperación de bloques hace que la recuperación de tablas grandes sea mucho, mucho más rápida.Sin embargo, con esto viene la falla de las tablas TEMP.Esta inicialización se realiza en el momento del inicio de JMP, por lo que realmente no es posible deshabilitarlo de forma selectiva para las tablas TEMP, incluso si pudiéramos analizar el SQL para detectar el uso de la tabla TEMP.
Ojalá pudiera darte mejores noticias.
Brian Corcorán
Desarrollo JMP
Re: Importar SQL usando una tabla temporalTendré que ceder ante los expertos de SQL Server en este entonces.
Re: Importar SQL usando una tabla temporalSin # no sería una tabla temporal.
Funciona correctamente en SQL SERVER.
Re: Importar SQL usando una tabla temporalNo soy un experto en servidores SQL, principalmente uso Oracle.Parece que al servidor SQL no le gusta el nombre de su tabla.Prueba Test en lugar de #Test.
¿Has validado los comandos SQL en una consola de SQL Server?
Re: Importar SQL usando una tabla temporalParece que se deshace de él tan pronto como finaliza la ejecución.
[Microsoft][Controlador ODBC para SQL Server][SQL Server]Nombre de objeto no válido '#Test'.
[Microsoft][Controlador ODBC para SQL Server][SQL Server]Nombre de objeto no válido '#Test'.
[Microsoft][Controlador ODBC para SQL Server][SQL Server]No se puede descartar la tabla '#Test' porque no existe o no tiene permiso.
Re: Importar SQL usando una tabla temporalIntente separar cada instrucción SQL:
base de datos = Crear conexión de base de datos ( "CONTROLADOR=Servidor SQL;
SERVIDOR=servidorlocal\SQLEXPRESS;
BASE DE DATOS=Prueba"
) ;
sql1 = "CREAR TABLA #Prueba (ID int)" ;
Ejecutar SQL ( base de datos , sql1 ) ;
sql2 = "Insertar EN #Test (ID) VALORES (1), (2), (3), (4), (5)" ;
Ejecutar SQL ( base de datos , sql2 ) ;
sql3 = "SELECCIONAR * DE #Prueba" ;
dt = Ejecutar SQL ( base de datos , sql3 , "#Prueba" ) ;
sql4 = "DROP TABLE #Prueba" ;
Ejecutar SQL ( base de datos , sql4 ) ;
cerrar la conexión a la base de datos ( base de datos ) ;