SQL-Abfrage an ODBC-Datenquelle / SQL-Server mit temporären TabellenLiebe Community,
Ich baue ein SQL-Skript, in dem temporäre Tabellen auf dem SQL-Server verwendet werden. Das vereinfachte Beispielskript unten (das an anderer Stelle gut funktioniert) wird ohne Fehler ausgeführt, gibt jedoch KEINE Daten zurück (dh die JMP-Datentabelle wird nicht angezeigt).
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);
Meine nächste Iteration bestand darin, die Ausführung wie folgt aufzuteilen; Dieser Trick wurde in einem Thread erwähnt.
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);
Jetzt erfasst das JMP-Protokollfenster Nachrichten vom SQL-Server (ohne zurückgegebene Daten): Ungültiger Objektname #tmpTable und Die Tabelle #tmpTable kann nicht gelöscht werden, da sie nicht existiert.
Ich verwende JMP16. Alle Ratschläge werden sehr geschätzt.
DatentabelleSkripterstellungBetreff: SQL-Abfrage an ODBC-Datenquelle / SQL-Server mit temporären TabellenHallo Jannel,
Ich hoffe, es ist nicht dieses alte Problem https://community.jmp.com/t5/Discussions/Importing-SQL-using-a-temp-table/mp/11760#M11264 . Hoffentlich hat jemand anderes im Forum kürzlich SQL Server Temp-Tabellen mit JMP verwendet.
Brian Corcoran
JMP-Entwicklung
Betreff: SQL-Abfrage an ODBC-Datenquelle / SQL-Server mit temporären TabellenHallo Brian, danke für den Hinweis auf den alten Thread; in der Tat sehr verwandt. Faszinierendes Thema!
Ich habe etwas debuggt, indem ich die Protokolle auf dem Test-SQL-Server durchgesehen habe, den ich auf meinem Laptop eingerichtet habe. Der erste Hinweis ist, dass dieselbe Abfrage (mit temporären Tabellen oder Tabellenvariablen), die mit derselben DNS-Verbindung / demselben ODBC-Treiber in Excel ausgeführt wird, einwandfrei funktioniert, aber nicht von JMP. Beim Suchen des eingehenden Datenverkehrs zum Server sendet Excel die Abfragezeichenfolge unverändert (z AUSWÄHLEN * AUS Tabelle ), aber von JMP kommt die Abfrage im Format:
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
Ich glaube, dass die SQL-Anweisung vom ODBC-Treiber mit zusätzlichen Dingen verpackt ist. Vor allem das System gespeicherte Prozedur sp_prepexec scheint derjenige zu sein, der Probleme verursacht. Kann sich auf Anführungszeichen beziehen oder nicht; schwer zu sagen, was wirklich in diesem Verfahren passiert.
Ok, es ist ein Problem mit dem ODBC-Treiber. Soweit bekannt, ermöglicht ODBC jedoch auch die direkte Ausführung. Ich glaube, das passiert mit Excel. Könnte das gleiche auch mit JMP möglich sein? Paar verwandte Links unten:
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
Betreff: SQL-Abfrage an ODBC-Datenquelle / SQL-Server mit temporären TabellenJane,
Wenn Sie Ihr erstes SQL ändern zu:
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);
Sie sollten die Tabelle in JMP bekommen.
Der Zusatz (falls er in der JSL verloren gegangen ist) lautet:
NOCOUNT EINSTELLEN;
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-Bryan
Betreff: SQL-Abfrage an ODBC-Datenquelle / SQL-Server mit temporären TabellenHallo Bryan,
Ihre Lösung NOCOUNT EINSTELLEN; funktioniert super!!! Ich bin überrascht, wie einfach die Lösung war. Ich habe einige Zeit damit verbracht, die Lösung in verschiedenen Foren und Threads zu suchen, aber niemand hat diese vorgeschlagen.
Vielen Dank;
Janne