Query SQL su origine dati ODBC/server SQL con tabelle temporaneeCara Comunità,
Sto costruendo uno script SQL in cui utilizzo tabelle temporanee sul server SQL. Lo script di esempio semplificato di seguito (che funziona bene altrove) viene eseguito senza errori ma NON restituisce alcun dato (ad es. la tabella dati JMP non viene visualizzata).
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);
La mia successiva iterazione è stata quella di dividere l'esecuzione come di seguito; questo trucco è stato menzionato in qualche thread.
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);
Ora la finestra del registro di JMP acquisisce i messaggi dal server SQL (senza i dati restituiti): Nome oggetto non valido #tmpTable e Impossibile eliminare la tabella #tmpTable in quanto non esiste.
Sto eseguendo JMP16. Tutti i consigli sono molto apprezzati.
Tabella datiSceneggiaturaRe: query SQL su origine dati ODBC/server SQL con tabelle temporaneeCiao Jannel,
Spero che non sia questo vecchio problema https://community.jmp.com/t5/Discussions/Importing-SQL-using-a-temp-table/mp/11760#M11264 . Si spera che qualcun altro sul forum abbia utilizzato le tabelle Temp di SQL Server più di recente con JMP.
Brian Corcoran
Sviluppo JMP
Re: query SQL su origine dati ODBC/server SQL con tabelle temporaneeCiao Brian, grazie per aver segnalato il vecchio thread; anzi molto imparentato. Problema affascinante!
Ho eseguito un po 'di debug guardando i registri durante il test di SQL Server che ho stabilito sul mio laptop. La prima nota è che la stessa query (con tabelle temporanee o variabili di tabella) eseguita utilizzando la stessa connessione DNS / driver ODBC in Excel funziona bene ma non da JMP. Quando esamina il traffico in entrata al server, Excel invia la stringa di query così com'è (ad es SELEZIONA * DA Tabella ) ma da JMP, la query arriva nel formato:
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
Credo che l'istruzione SQL sia racchiusa con elementi extra dal driver ODBC. Soprattutto il sistema procedura memorizzata sp_prepexec sembra essere quello che causa problemi. Può o non può essere correlato alle virgolette; difficile dire cosa succede veramente all'interno di quella procedura.
Ok, è un problema con il driver ODBC. Tuttavia, per quanto ne sappiamo, ODBC consente anche l'esecuzione diretta. Credo che questo sia ciò che accade con Excel. Lo stesso potrebbe essere possibile anche con JMP? Coppia link correlati di seguito:
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: query SQL su origine dati ODBC/server SQL con tabelle temporaneeJane,
Se modifichi il tuo primo SQL in:
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);
Dovresti inserire la tabella in JMP.
L'aggiunta, (nel caso si perdesse nella JSL) è:
IMPOSTA NESSUN CONTO ATTIVO;
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-Bryan
Re: query SQL su origine dati ODBC/server SQL con tabelle temporaneeCiao Bryan,
La tua soluzione IMPOSTA NESSUN CONTO ATTIVO; funziona alla grande!!! Sono stupito di quanto sia stata facile la soluzione. Ho passato un po' di tempo a cercare la soluzione da vari forum e discussioni, ma nessuno l'ha suggerito.
Grazie mille;
Janne