Importieren von SQL mithilfe einer temporären Tabelle<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe Schwierigkeiten, gespeicherte Prozeduren und temporäre Tabellen in JMP 11.2.1 zu verwenden.Ich bekomme einfach keine Gegenleistung
db = Datenbankverbindung erstellen ("DRIVER=SQL Server;
SERVER=lokalerServer\SQLEXPRESS;
DATENBANK=Test"
);
SQL ausführen (db,
"
TABELLE ERSTELLEN #Test (ID int)
IN #Test einfügen (ID)
WERTE (1), (2), (3), (4), (5)
WÄHLEN *
VON #Test
DROP TABLE #Test
",
":-("
);
Datenbankverbindung schließen (db);
Dieses Problem plagt mich seit einiger Zeit.So wie es aussieht, kann SAS es tun, also denke ich nicht, dass es ein Problem mit ODBC ist.
Betreff: Importieren von SQL mit einer temporären TabelleVince,
Danke.Wäre es sinnvoll, nach älteren ODBC 2.0-Downloads zu suchen?Ich hatte noch nicht viel Glück.
Re: Importieren von SQL mit einer temporären TabelleSo wie ich es verstanden habe, ist dies nicht auf der JMP-Seite zu beheben.Das Problem liegt auf der Seite von Microsoft, wie es ihre Treiber für ODBC 3.0 nennen.Sie könnten möglicherweise versuchen, #Tables zu erkennen, wie Sie sagten, aber ich glaube nicht, dass ich ein Skript unterbrechen möchte, um mir mitzuteilen, dass mein SQL in einer inakzeptablen Weise geschrieben ist.Etwas an das Protokoll zu übergeben, konnte ich jedoch als nützlich erachten.
Re: Importieren von SQL mit einer temporären TabelleMir ist aufgefallen, dass das Speichern der Ergebnisse aus jedem Abfrageteil als wörtliche JMP-Datentabellen und das anschließende manuelle Verbinden innerhalb von JSL manchmal zu funktionieren scheint.Es kann Ihre Zeit zwar wirklich in Anspruch nehmen, aber Sie können die Ergebnisse aktiv halten, bis Sie eine Close Data Table ausführen.
Re: Importieren von SQL mit einer temporären TabelleDanke für die Erklärung.Allerdings gefällt mir nicht, wie das funktioniert.ich sollte einfach in der Lage sein, jede Abfrage zu nehmen, die in anderen Anwendungen gut läuft, und dasselbe Ergebnis zu sehen/erwarten, wenn es innerhalb von JMP/JSL ausgeführt wird.
Ich habe diesen Thread gelesen und eines ist klar ... die besprochene Problemumgehung, alle temporären Tabellen in separate Abfragen aufzuteilen, ist KEINE gute Lösung für uns JSL-Entwickler.Ich habe eine große, ältere Abfrage, die gut funktioniert, und es wird buchstäblich Stunden dauern, sie aufzuteilen.Was soll das?Wie ist dies die bevorzugte Methode?Ich habe auch festgestellt, dass JMP bei meinem ersten Versuch der Abfrageaufteilung keine OIDs in die neue Datentabelle lädt.Ich bin mir also nicht sicher, ob ich diese Abfrage aufteilen kann.Wenn ich fortfahre, kann ich einer leeren OID-Spalte nicht beitreten....Wenn ich diesen identischen Abfrageteil über SQL Server ausführe, enthält meine Spalte Daten.
Ich war auch überrascht, dass dieses Thema war schwierig zu finden - es dauerte ein paar Google-Suchen.Einschränkungen sollten im JSL-Handbuch klar angegeben werden, aber dies ist das erste Mal, dass ich es lese.Ich habe speziell mehrere Hilfsfunktionen geschrieben, die jetzt nicht sehr hilfreich sind.Jetzt merke ich, dass es Zeitverschwendung war.Es wird tatsächlich schneller für mich sein, eine andere Anwendung zum Schreiben in CSV zu verwenden und diese von JMP laden zu lassen.Diese Software ist nicht billig, daher würde ich erwarten, dass Temp Tables/SQL in JMP funktioniert, anstatt eine externe App zu benötigen, um Zeit zu sparen.
Zumindest würde ich erwarten, dass diese Anwendung bessere Benachrichtigungen hat.Wenn JMP die Verwendung temporärer Tabellen entweder innerhalb von JSL oder der Plattform „Open Table > Advanced“ erkennt, wird möglicherweise eine Meldung angezeigt sollen an den Entwickler gesendet werden, um ihn darüber zu informieren, dass JMP den Vorgang nicht ausführen kann ...?
Dieser Thread scheint nicht mehr aktiv zu sein... Plant SAS/JMP, dieses Problem zu beheben?
Re: Importieren von SQL mit einer temporären TabelleEs ist vielleicht nicht deine Schuld.Es gibt einen Fehler in JMP 12, der dazu führt, dass gespeicherte Prozeduren keine Zeilen an JMP zurückgeben (ich bin mir ehrlich gesagt nicht sicher, wie Brian eine zum Laufen gebracht hat).Es wird in der Wartungsversion 12.1 behoben, die in ein paar Monaten erscheinen soll.
AKTUALISIEREN : Ich war verwirrt.Der Fehler bezüglich gespeicherter Prozeduren, die keine Zeilen zurückgeben, war eigentlich *nicht* in JMP 12 – er wurde innerhalb des JMP 12.1-Zyklus eingeführt und behoben.Sie müssen sich also möglicherweise Ihren gespeicherten Prozedurcode ansehen.Wir haben Szenarien gesehen, in denen eine Tabelle erstellt und dann innerhalb einer einzelnen gespeicherten Prozedur ausgewählt wird, in der die Zeilen nicht an JMP zurückgegeben werden.
Erich
Re: Importieren von SQL mit einer temporären TabelleDanke Brian, ich muss es einfach falsch genannt haben.
Re: Importieren von SQL mit einer temporären TabelleHallo Vince,
Mir ist kein Problem mit gespeicherten Prozeduren bekannt.Ich konnte hier einen zum Laufen bringen, obwohl wir nicht viele gute Beispiele für SQL Server haben.Ich weiß, dass Zitieren ein großes Problem ist.Was siehst du?
Brian
Re: Importieren von SQL mit einer temporären TabelleDanke Brian, das war wirklich informativ.
Ist es das gleiche Problem, das möglicherweise auch dazu führt, dass gespeicherte Prozeduren fehlschlagen?
Re: Importieren von SQL mit einer temporären TabelleHallo Vince,
Es tut mir leid wegen der verspäteten Antwort, aber ich wollte diesbezüglich Nachforschungen anstellen.Leider scheint dies ein Problem mit den Microsoft SQL Server ODBC-Treibern (sowohl Native Client als auch Office-Version) zu sein.Die Tabellenerstellung schlägt stillschweigend fehl, wenn wir die SQL übermitteln.Mit einem Treiber wie dem SQL Server-Treiber von Actual Technologies für den Mac gelingt dies problemlos.Ich weiß, dass dies in älteren Versionen von JMP funktionieren würde, da wir zu diesem Zeitpunkt ODBC 3.0 nicht erzwangen. Diese Ebene ist erforderlich, um das Abrufen von Blöcken in SQL Server und anderen Datenbankanbietern zu verwenden.Das Abrufen von Blöcken macht das Abrufen großer Tabellen viel, viel schneller.Damit einher geht jedoch das Versagen von TEMP-Tabellen.Diese Initialisierung erfolgt beim Start von JMP, daher ist es wirklich nicht möglich, sie selektiv für TEMP-Tabellen zu deaktivieren, selbst wenn wir die SQL analysieren könnten, um die Verwendung der TEMP-Tabelle zu erkennen.
Ich wünschte, ich könnte Ihnen bessere Neuigkeiten mitteilen.
Brian Corcoran
JMP-Entwicklung
Re: Importieren von SQL mit einer temporären TabelleDann muss ich mich hier an die SQL Server-Experten wenden.
Betreff: Importieren von SQL mit einer temporären TabelleOhne # gäbe es keine temporäre Tabelle.
Es funktioniert ordnungsgemäß in SQL SERVER.
Re: Importieren von SQL mit einer temporären TabelleIch bin kein SQL-Server-Experte - ich verwende meistens Oracle.Es scheint, dass SQL Server den Namen Ihrer Tabelle nicht mag.Probieren Sie Test statt #Test aus.
Haben Sie die SQL-Befehle in einer SQL Server-Konsole validiert?
Betreff: Importieren von SQL mit einer temporären TabelleEs sieht so aus, als würde es es los, sobald die Ausführung beendet ist.
[Microsoft][ODBC SQL Server-Treiber][SQL Server] Ungültiger Objektname „#Test“.
[Microsoft][ODBC SQL Server-Treiber][SQL Server] Ungültiger Objektname „#Test“.
[Microsoft][ODBC SQL Server-Treiber][SQL Server]Die Tabelle „#Test“ kann nicht gelöscht werden, da sie nicht vorhanden ist oder Sie keine Berechtigung haben.
Re: Importieren von SQL mit einer temporären TabelleVersuchen Sie, jede SQL-Anweisung zu trennen:
db = Datenbankverbindung erstellen ( "TREIBER=SQL-Server;
SERVER=lokalerServer\SQLEXPRESS;
DATENBANK=Test"
) ;
SQL1 = "TABELLE ERSTELLEN #Test (ID int)" ;
Führen Sie SQL aus ( db , SQL1 ) ;
SQL2 = "INSERT INTO #Test (ID) VALUES (1), (2), (3), (4), (5)" ;
Führen Sie SQL aus ( db , SQL2 ) ;
SQL3 = „WÄHLE * AUS #Test“ ;
dt = Führen Sie SQL aus ( db , SQL3 , "#Prüfen" ) ;
SQL4 = "ABFALLTABELLE #Test" ;
Führen Sie SQL aus ( db , SQL4 ) ;
Datenbankverbindung schließen ( db ) ;