Importer SQL à l'aide d'une table temporaire<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai du mal à utiliser les procédures stockées et les tables temporaires dans JMP 11.2.1.Je n'obtiens tout simplement aucun retour
db = Créer une connexion à la base de données("DRIVER=SQL Server ;
SERVEUR=serveurlocal\SQLEXPRESS ;
BASE DE DONNEES=Test"
);
Exécutez SQL(db,
"
CRÉER TABLE #Test ( ID int)
Insérer DANS #Test (ID)
VALEURS (1), (2), (3), (4), (5)
SÉLECTIONNER *
DE #Test
DROP TABLE #Test
",
":-("
);
fermer la connexion à la base de données (db);
Ce problème me tourmente depuis un certain temps.À première vue, SAS peut le faire, donc je ne pense pas que ce soit un problème avec ODBC.
Re : Importer SQL à l'aide d'une table temporaireVincent,
Merci.Serait-il judicieux de rechercher des téléchargements ODBC 2.0 plus anciens ?Je n'ai pas encore eu beaucoup de chance.
Re : Importer SQL à l'aide d'une table temporaireD'après ce que j'ai compris, ce n'est pas du côté de JMP à corriger.Le problème est du côté de Microsoft dans la façon dont leurs pilotes pour ODBC 3.0 l'appellent.Ils pourraient éventuellement essayer de détecter #Tables comme vous l'avez dit, mais je ne pense pas que je voudrais interrompre un script pour me dire que mon SQL est écrit de manière inacceptable.Passer quelque chose au journal que je pourrais voir être utile cependant.
Re : Importer SQL à l'aide d'une table temporaireJ'ai remarqué que l'enregistrement des résultats de chaque partie de la requête sous forme de tables de données JMP littérales, puis leur jonction manuelle via JSL semble fonctionner de temps en temps.Cependant, cela peut vraiment vous faire perdre du temps, mais vous pourrez conserver les résultats actifs jusqu'à ce que vous exécutiez une table de données fermée.
Re : Importer SQL à l'aide d'une table temporaireMerci pour l'explication.Cependant, je n'aime pas comment cela fonctionne.je devrais simplement pouvoir prendre n'importe quelle requête qui s'exécute correctement dans d'autres applications et voir/attendre le même résultat lorsqu'il est exécuté dans JMP/JSL.
J'ai lu ce fil et une chose est claire ... la solution de contournement discutée, en divisant toutes les tables temporaires en requêtes distinctes, n'est PAS une bonne solution pour nous, les développeurs JSL.J'ai une grande requête plus ancienne qui fonctionne très bien et il me faudra littéralement des heures pour la diviser.Quel est le point de cela?En quoi est-ce la méthode préférée ?J'ai également remarqué que lors de ma première tentative de fractionnement de requête, JMP ne chargeait pas les OID dans la nouvelle table de données.Je ne sais donc pas vraiment si je peux diviser cette requête.Si je continue, je ne peux pas joindre sur une colonne OID vide...Lorsque j'exécute cette partie de requête identique via SQL Server, ma colonne contient des données.
J'ai également été surpris que ce sujet soit difficile pour trouver - il a fallu quelques recherches sur Google.Les limitations doivent être clairement indiquées dans le manuel JSL, mais c'est la première fois que je le lis.J'ai spécifiquement écrit plusieurs fonctions d'assistance - qui ne sont plus très utiles.Maintenant, je me rends compte que c'était une perte de temps.Il sera en fait plus rapide pour moi d'utiliser une autre application pour écrire au format csv et de charger JMP.Ce logiciel n'est pas bon marché, donc je m'attendrais à ce que Temp Tables/SQL fonctionne dans JMP au lieu d'avoir besoin d'une application externe pour me faire gagner du temps.
À tout le moins, je m'attendrais à ce que cette application ait de meilleures notifications.Si JMP détecte l'utilisation d'une table temporaire dans JSL ou dans la plate-forme "Open Table > Advanced", un message peut s'afficher devrait être envoyé au développeur pour l'informer que JMP ne peut pas gérer l'opération... ?
Ce fil ne semble plus actif... SAS/JMP prévoit-il de résoudre ce problème ?
Re : Importer SQL à l'aide d'une table temporaireCe n'est peut-être pas votre faute.Il y a un bogue dans JMP 12 qui fait que les procédures stockées ne renvoient aucune ligne à JMP (je ne sais franchement pas comment Brian en a fait fonctionner une).Il sera corrigé dans la version de maintenance 12.1, qui devrait sortir dans quelques mois.
MISE À JOUR : J'étais confus.Le bogue concernant les procédures stockées ne renvoyant aucune ligne n'était en fait * pas * dans JMP 12 - il a été introduit et corrigé dans le cycle JMP 12.1.Vous devrez donc peut-être consulter votre code de procédure stockée.Nous avons vu des scénarios dans lesquels une table est créée puis sélectionnée dans une procédure stockée unique où les lignes ne sont pas renvoyées à JMP.
Éric
Re : Importer SQL à l'aide d'une table temporaireMerci Brian, j'ai dû mal l'appeler.
Re : Importer SQL à l'aide d'une table temporaireSalut Vince,
Je ne suis pas au courant d'un problème avec les procédures stockées.J'ai pu en faire fonctionner un ici, bien que nous n'ayons pas beaucoup de bons exemples sur SQL Server.Je sais que la citation est un gros problème.Que vois-tu?
Brian
Re : Importer SQL à l'aide d'une table temporaireMerci Brian c'était vraiment instructif.
Est-ce le même problème qui peut également entraîner l'échec des procédures stockées ?
Re : Importer SQL à l'aide d'une table temporaireSalut Vince,
Je suis désolé pour la réponse tardive, mais je voulais faire une enquête à ce sujet.Malheureusement, cela semble être un problème avec les pilotes ODBC de Microsoft SQL Server (versions Native Client et Office).La création de la table échoue silencieusement lorsque nous soumettons le SQL.Avec un pilote comme le pilote Actual Technologies SQL Server pour Mac, cela réussit très bien.Je sais que dans les anciennes versions de JMP, cela fonctionnerait, car à l'époque, nous n'appliquions pas ODBC 3.0. Ce niveau est requis pour utiliser la récupération de blocs dans SQL Server et d'autres fournisseurs de bases de données.La récupération de blocs rend la récupération de grandes tables beaucoup, beaucoup plus rapide.Cependant, cela s'accompagne de l'échec des tables TEMP.Cette initialisation est effectuée au démarrage de JMP, il n'est donc vraiment pas possible de la désactiver de manière sélective pour les tables TEMP, même si nous pourrions analyser le SQL pour détecter l'utilisation de la table TEMP.
J'aimerais pouvoir vous donner de meilleures nouvelles.
Brian Corcoran
Développement JMP
Re : Importer SQL à l'aide d'une table temporaireJe vais devoir m'en remettre aux experts SQL Server sur celui-ci alors.
Re : Importer SQL à l'aide d'une table temporaireSans # ne serait pas une table temporaire.
Cela fonctionne correctement dans SQL SERVER.
Re : Importer SQL à l'aide d'une table temporaireJe ne suis pas un expert du serveur SQL - j'utilise principalement Oracle.Il semble que le serveur SQL n'aime pas le nom de votre table.Essayez Test au lieu de #Test.
Avez-vous validé les commandes SQL dans une console SQL Server ?
Re : Importer SQL à l'aide d'une table temporaireIl semble qu'il s'en débarrasse dès que l'exécution est terminée.
[Microsoft][Pilote ODBC SQL Server][SQL Server]Nom d'objet non valide '#Test'.
[Microsoft][Pilote ODBC SQL Server][SQL Server]Nom d'objet non valide '#Test'.
[Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de supprimer la table '#Test', car elle n'existe pas ou vous n'avez pas l'autorisation.
Re : Importer SQL à l'aide d'une table temporaireEssayez de séparer chaque instruction SQL :
db = Créer une connexion à la base de données ( "PILOTE=SQL Server ;
SERVEUR=serveurlocal\SQLEXPRESS ;
BASE DE DONNEES=Test"
) ;
sql1 = "CRÉER TABLE #Test (ID entier)" ;
Exécuter SQL ( db , sql1 ) ;
sql2 = "Insérer DANS #Test (ID) VALEURS (1), (2), (3), (4), (5)" ;
Exécuter SQL ( db , sql2 ) ;
sql3 = "SÉLECTIONNER * À PARTIR DE #Test" ;
dt = Exécuter SQL ( db , sql3 , "#Test" ) ;
sql4 = "DÉPOSER LE TABLEAU #Test" ;
Exécuter SQL ( db , sql4 ) ;
fermer la connexion à la base de données ( db ) ;