Importazione di SQL utilizzando una tabella temporanea<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto riscontrando difficoltà nell'utilizzo di stored procedure e tabelle temporanee in JMP 11.2.1.Semplicemente non ottengo alcun ritorno
db = Crea connessione database("DRIVER=SQL Server;
SERVER=serverlocale\SQLEXPRESS;
DATABASE=Test"
);
Esegui SQL(db,
"
CREA TABELLA #Test ( ID int)
Inserisci IN #Test (ID)
VALORI (1), (2), (3), (4), (5)
SELEZIONARE *
DA #Test
DROP TABLE #Test
",
":-("
);
chiudere la connessione al database (db);
Questo problema mi affligge da tempo.A quanto pare, SAS può farlo, quindi non penso che sia un problema con ODBC.
Re: Importazione SQL utilizzando una tabella temporaneaVince,
Grazie.Avrebbe senso cercare vecchi download ODBC 2.0?Non ho ancora avuto molta fortuna.
Re: Importazione SQL utilizzando una tabella temporaneaPer come l'ho capito, questo non è da parte di JMP da risolvere.Il problema è dalla parte di Microsoft nel modo in cui lo chiamano i driver per ODBC 3.0.Potrebbero provare a rilevare #Tables come hai detto, ma non credo che vorrei interrompere uno script per dirmi che il mio SQL è scritto in modo inaccettabile.Passando qualcosa al registro ho potuto vedere essere utile però.
Re: Importazione SQL utilizzando una tabella temporaneaHo notato che il salvataggio dei risultati di ciascuna porzione di query come tabelle di dati JMP letterali e quindi l'unione manuale tramite JSL sembra funzionare a volte.Tuttavia, può davvero farti perdere tempo, ma sarai in grado di mantenere attivi i risultati fino a quando non eseguirai una Chiudi tabella dati.
Re: Importazione SQL utilizzando una tabella temporaneaGrazie per la spiegazione.Tuttavia, non mi piace come funziona.dovrei semplicemente essere in grado di accettare qualsiasi query che funzioni correttamente in altre applicazioni e vedere/aspettarsi lo stesso risultato quando eseguita all'interno di JMP/JSL.
Ho letto questo thread e una cosa è chiara ... la soluzione alternativa discussa, suddividendo tutte le tabelle temporanee in query separate, NON è una buona soluzione per noi sviluppatori JSL.Ho una query grande e più vecchia che funziona perfettamente e mi ci vorranno letteralmente ore per dividerla.Qual è il punto?Come è questo il metodo preferito?Ho anche notato che nel mio primo tentativo di suddivisione della query, JMP non carica gli OID nella nuova tabella dati.Quindi non sono davvero sicuro di poter dividere questa query.Se continuo, non posso unirmi a una colonna OID vuota....Quando eseguo questa porzione di query identica tramite SQL Server, la mia colonna contiene dati.
Sono stato anche sorpreso che questo argomento fosse difficile per trovarlo ci sono volute alcune ricerche su Google.Le limitazioni dovrebbero essere chiaramente indicate nel Manuale JSL, ma questo è il primo che lo leggo.Ho scritto specificamente diverse funzioni di supporto, che ora non sono molto utili.Ora mi rendo conto che è stata una perdita di tempo.In realtà sarà più veloce per me usare un'altra applicazione per scrivere su csv e farlo caricare da JMP.Questo software non è economico, quindi mi aspetto che Temp Tables/SQL funzioni in JMP invece di aver bisogno di un'app esterna per farmi risparmiare tempo.
Per lo meno, mi aspetto che questa applicazione abbia notifiche migliori.Se JMP rileva l'utilizzo della tabella temporanea all'interno di JSL o nella piattaforma "Apri tabella > Avanzate", potrebbe essere visualizzato un messaggio dovrebbe essere inviato allo sviluppatore per informarlo che JMP non può gestire l'operazione...?
Questa discussione non sembra più attiva... SAS/JMP prevede di risolvere questo problema?
Re: Importazione SQL utilizzando una tabella temporaneaPotrebbe non essere colpa tua.C'è un bug in JMP 12 che fa sì che le procedure memorizzate non restituiscano alcuna riga a JMP (francamente non sono sicuro di come Brian ne abbia fatto funzionare una).Verrà corretto nella versione di manutenzione 12.1, che dovrebbe uscire tra pochi mesi.
AGGIORNARE : Ero confuso.Il bug relativo alle procedure memorizzate che non restituiscono alcuna riga in realtà *non* in JMP 12: è stato introdotto e corretto all'interno del ciclo JMP 12.1.Quindi potrebbe essere necessario guardare il codice della procedura memorizzata.Abbiamo visto scenari in cui una tabella viene creata e quindi selezionata all'interno di una singola procedura memorizzata in cui le righe non vengono restituite a JMP.
Eric
Re: Importazione SQL utilizzando una tabella temporaneaGrazie Brian, devo aver chiamato male.
Re: Importazione SQL utilizzando una tabella temporaneaCiao Vince,
Non sono a conoscenza di un problema con le stored procedure.Sono riuscito a far funzionare uno qui, anche se non abbiamo molti buoni esempi su SQL Server.So che citare è un grosso problema.Cosa stai vedendo?
Brian
Re: Importazione SQL utilizzando una tabella temporaneaGrazie Brian, è stato davvero istruttivo.
È lo stesso problema che potrebbe causare anche il fallimento delle stored procedure?
Re: Importazione SQL utilizzando una tabella temporaneaCiao Vince,
Mi scuso per il ritardo nella risposta, ma volevo fare delle indagini in merito.Sfortunatamente questo sembra essere un problema con i driver ODBC di Microsoft SQL Server (sia Native Client che versione Office).La creazione della tabella non riesce silenziosamente quando inviamo l'SQL.Con un driver come il driver Actual Technologies SQL Server per Mac, questo funziona perfettamente.So che nelle versioni precedenti di JMP questo funzionerebbe, perché all'epoca non stavamo applicando ODBC 3.0. Questo livello è necessario per utilizzare il recupero dei blocchi all'interno di SQL Server e altri fornitori di database.Il recupero dei blocchi rende il recupero di tabelle di grandi dimensioni molto, molto più veloce.Tuttavia, con questo arriva il fallimento delle tabelle TEMP.Questa inizializzazione viene eseguita all'avvio di JMP, quindi non è davvero possibile disabilitarla selettivamente per le tabelle TEMP, anche se potremmo analizzare l'SQL per rilevare l'utilizzo della tabella TEMP.
Vorrei poterti dare notizie migliori.
Brian Corcoran
Sviluppo JMP
Re: Importazione SQL utilizzando una tabella temporaneaAllora dovrò rimandare agli esperti di SQL Server su questo.
Re: Importazione SQL utilizzando una tabella temporaneaSenza # non sarebbe una tabella temporanea.
Funziona correttamente in SQL SERVER.
Re: Importazione SQL utilizzando una tabella temporaneaNon sono un esperto di server SQL: uso principalmente Oracle.Sembra che al server SQL non piaccia il nome della tua tabella.Prova Test invece di #Test.
Hai convalidato i comandi SQL in una console di SQL Server?
Re: Importazione SQL utilizzando una tabella temporaneaSembra che se ne liberi non appena l'esecuzione è terminata.
[Microsoft][Driver ODBC SQL Server][SQL Server]Nome oggetto '#Test' non valido.
[Microsoft][Driver ODBC SQL Server][SQL Server]Nome oggetto '#Test' non valido.
[Microsoft][Driver ODBC SQL Server][SQL Server]Impossibile eliminare la tabella '#Test', perché non esiste o non si dispone dell'autorizzazione.
Re: Importazione SQL utilizzando una tabella temporaneaProva a separare ogni istruzione SQL:
db = Crea connessione al database ( "DRIVER=SQL Server;
SERVER=serverlocale\SQLEXPRESS;
DATABASE=Test"
) ;
sql1 = "CREA TABELLA #Test ( ID int)" ;
Esegui SQL ( db , sql1 ) ;
sql2 = "Inserisci IN #Test (ID) VALORI (1), (2), (3), (4), (5)" ;
Esegui SQL ( db , sql2 ) ;
sql3 = "SELEZIONA * DA #Test" ;
dt = Esegui SQL ( db , sql3 , "#Test" ) ;
sql4 = "TABELLA A CADUTA #Test" ;
Esegui SQL ( db , sql4 ) ;
chiudere la connessione al database ( db ) ;