SQL-Abfrage an ODBC-Datenquelle/SQL-Server mit temporären TabellenLiebe Community,
Ich erstelle ein SQL-Skript, bei dem temporäre Tabellen auf dem SQL-Server verwendet werden. Das vereinfachte Beispielskript unten (das anderswo gut funktioniert) läuft ohne Fehler, gibt aber KEINE Daten zurück (d. h. 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 irgendeinem 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 vorhanden ist.
Ich verwende JMP16. Jeder Rat wird sehr geschätzt.
DatenzugriffQualitäts- und VerfahrenstechnikBetreff: SQL-Abfrage an ODBC-Datenquelle/SQL-Server mit temporären TabellenSET NOCOUNT ON ist in der Tat eine seltsame Option.
Freut mich, dass es bei dir geklappt hat!
Betreff: SQL-Abfrage an ODBC-Datenquelle/SQL-Server mit temporären TabellenHallo Bryan,
Ihre Lösung SETZEN SIE NOCOUNT AUF; funktioniert super!!! Ich bin erstaunt, wie einfach die Lösung war. Ich habe einige Zeit damit verbracht, in verschiedenen Foren und Threads nach der Lösung zu suchen, aber niemand hat diese Lösung vorgeschlagen.
Vielen Dank;
Janne
Betreff: SQL-Abfrage an ODBC-Datenquelle/SQL-Server mit temporären TabellenJane,
Wenn Sie Ihr erstes SQL wie folgt ändern:
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 importieren.
Der Zusatz (falls er in der JSL verloren gegangen ist) lautet:
SETZEN SIE NOCOUNT AUF;
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 Brian, danke für den Hinweis auf den alten Thread; tatsächlich sehr verwandt. Faszinierendes Thema!
Ich habe einige Fehler behoben, indem ich mir die Protokolle des Test-SQL-Servers angesehen habe, den ich auf meinem Laptop eingerichtet habe. Der erste Hinweis ist, dass dieselbe Abfrage (mit temporären Tabellen oder Tabellenvariablen), die über dieselbe DNS-Verbindung/den gleichen ODBC-Treiber in Excel ausgeführt wird, einwandfrei funktioniert, jedoch nicht über JMP. Beim Durchsuchen des eingehenden Datenverkehrs zum Server sendet Excel die Abfragezeichenfolge unverändert (z. B SELECT * FROM Table ), 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 umschlossen ist. Vor allem das System gespeicherte Prozedur sp_prepexec scheint derjenige zu sein, der Probleme verursacht. Kann mit Anführungszeichen zusammenhängen oder auch nicht; Es ist schwer zu sagen, was bei diesem Verfahren wirklich passiert.
Ok, es handelt sich um 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 auch mit JMP möglich sein? Links zu Paaren 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 TabellenHallo Jannel,
Ich hoffe, dass es sich nicht um dieses alte Problem handelt Importieren von SQL mithilfe einer temporären Tabelle . Hoffentlich hat jemand anderes im Forum kürzlich SQL Server Temp-Tabellen mit JMP verwendet.
Brian Corcoran
JMP-Entwicklung