Importazione di SQL utilizzando una tabella temporanea<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho difficoltà a utilizzare le stored procedure e le tabelle temporanee in JMP 11.2.1.Semplicemente non ottengo alcun ritorno
db = Crea connessione al database("DRIVER=SQL Server;
SERVER=serverlocale\SQLEXPRESS;
DATABASE=Test"
);
Esegui SQL(db,
"
CREATE TABLE #Test ( ID int)
Inserisci IN #Test (ID)
VALORI (1), (2), (3), (4), (5)
SELEZIONARE *
DA #Test
TAVOLO DROP #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.
Ri: Importare SQL usando una tabella temporaneaVinci,
Grazie.Avrebbe senso cercare i download di ODBC 2.0 meno recenti?Non ho ancora avuto molta fortuna.
Ri: Importare SQL usando 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 loro 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ò.
Ri: Importare SQL usando una tabella temporaneaHo notato che salvare i risultati di ciascuna porzione di query come tabelle di dati JMP letterali e quindi unirli manualmente all'interno di JSL sembra funzionare a volte.Tuttavia, può davvero consumare il tuo tempo, ma sarai in grado di mantenere attivi i risultati fino a quando non esegui una tabella dati di chiusura.
Ri: Importare SQL usando 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 eseguito all'interno di JMP/JSL.
Ho letto questo thread e una cosa è chiara ... la soluzione alternativa discussa, dividendo 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 suddividerla.Che senso ha?Come è questo il metodo preferito?Ho anche notato che nel mio primo tentativo di divisione della query, JMP non sta caricando gli OID nella nuova tabella dati.Quindi non sono davvero sicuro di poter suddividere questa query.Se continuo, non posso unirmi a una colonna OID vuota....Quando eseguo questa parte di query identica tramite SQL Server, la mia colonna contiene dati.
Sono stato anche sorpreso che questo argomento fosse difficile per trovare - ci sono volute alcune ricerche su Google.Le limitazioni dovrebbero essere chiaramente indicate nel Manuale JSL, ma questa è la prima volta 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 utilizzare un'altra applicazione per scrivere in csv e farla 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 di tabelle temporanee all'interno di JSL o della piattaforma "Apri tabella > Avanzate", potrebbe essere visualizzato un messaggio Dovrebbe essere inviato allo sviluppatore per informarlo che JMP non è in grado di gestire l'operazione...?
Questa discussione non sembra più attiva... SAS/JMP prevede di risolvere questo problema?
Ri: Importare SQL usando una tabella temporaneaPotrebbe non essere colpa tua.C'è un bug in JMP 12 che impedisce alle procedure memorizzate di restituire alcuna riga a JMP (francamente non sono sicuro di come Brian ne abbia fatto funzionare uno).Verrà risolto nella versione di manutenzione 12.1, che dovrebbe uscire tra pochi mesi.
AGGIORNAMENTO : Ero confuso.Il bug relativo alle procedure memorizzate che non restituiscono alcuna riga in realtà *non* era presente in JMP 12: è stato introdotto e corretto all'interno del ciclo di JMP 12.1.Quindi potrebbe essere necessario esaminare il codice della procedura memorizzata.Abbiamo visto scenari in cui una tabella viene creata e quindi selezionata all'interno di una singola stored procedure in cui le righe non vengono restituite a JMP.
Eric
Ri: Importare SQL usando una tabella temporaneaGrazie Brian, devo averlo appena chiamato sbagliato.
Ri: Importare SQL usando una tabella temporaneaCiao Vince,
Non sono a conoscenza di un problema con le stored procedure.Sono riuscito a farne funzionare uno qui, anche se non abbiamo molti buoni esempi su SQL Server.So che la quotazione è un grosso problema.Cosa stai vedendo?
Brian
Ri: Importare SQL usando una tabella temporaneaGrazie Brian, è stato davvero istruttivo.
È lo stesso problema che potrebbe causare anche il fallimento delle stored procedure?
Ri: Importare SQL usando una tabella temporaneaCiao Vince,
Mi scuso per il ritardo nella risposta, ma volevo fare qualche indagine in merito.Sfortunatamente questo sembra essere un problema con i driver ODBC di Microsoft SQL Server (sia la versione Native Client che Office).La creazione della tabella fallisce silenziosamente quando inviamo l'SQL.Con un driver come il driver SQL Server di Actual Technologies per Mac, questo riesce perfettamente.So che nelle versioni precedenti di JMP avrebbe funzionato, perché all'epoca non applicavamo 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 al momento dell'avvio per JMP, quindi non è davvero possibile disabilitarla selettivamente per le tabelle TEMP, anche se potessimo analizzare l'SQL per rilevare l'utilizzo della tabella TEMP.
Vorrei poterti dare notizie migliori.
Brian Corcoran
Sviluppo JMP
Ri: Importare SQL usando una tabella temporaneaAllora dovrò rimandare agli esperti di SQL Server su questo.
Ri: Importare SQL usando una tabella temporaneaSenza # non sarebbe una tabella temporanea.
Funziona correttamente in SQL SERVER.
Ri: Importare SQL usando una tabella temporaneaNon sono un esperto di server SQL: utilizzo 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?
Ri: Importare SQL usando una tabella temporaneaSembra che se ne sbarazzi non appena Execute è finito.
[Microsoft][Driver ODBC SQL Server][SQL Server]Nome oggetto non valido '#Test'.
[Microsoft][Driver ODBC SQL Server][SQL Server]Nome oggetto non valido '#Test'.
[Microsoft][Driver ODBC SQL Server][SQL Server]Impossibile eliminare la tabella '#Test' perché non esiste o non si dispone dell'autorizzazione.
Ri: Importare SQL usando una tabella temporaneaProva a separare ogni istruzione SQL:
db = Crea connessione al database ( "DRIVER=Server SQL;
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" ;
tt = Esegui SQL ( db , sql3 , "#Test" ) ;
sql4 = "DROP TABLE #Test" ;
Esegui SQL ( db , sql4 ) ;
chiudere la connessione al database ( db ) ;