Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesChère Communauté,
Je construis un script SQL utilisant des tables temporaires sur le serveur SQL. L'exemple de script simplifié ci-dessous (qui fonctionne bien ailleurs) s'exécute sans erreur mais ne renvoie AUCUNE donnée (c'est-à-dire que la table de données JMP ne s'affiche pas).
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);
Ma prochaine itération consistait à diviser l'exécution comme ci-dessous ; cette astuce a été mentionnée sur un fil de discussion.
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);
Désormais, la fenêtre du journal JMP capture les messages du serveur SQL (sans données renvoyées) : Nom d'objet non valide #tmpTable et Impossible de supprimer la table #tmpTable car elle n'existe pas.
J'utilise JMP16. Tous les conseils sont très appréciés.
Accès aux donnéesIngénierie Qualité et ProcédésRe : Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesSET NOCOUNT ON est en effet une option étrange.
Content que ça ait marché pour toi !
Re : Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesSalut Bryan,
Votre solution METTRE NOCOUNT SUR ; fonctionne très bien!!! Je suis étonné de voir à quel point la solution était simple. J'ai passé pas mal de temps à chercher la solution sur divers forums et discussions, mais personne n'a suggéré celle-ci.
Grand merci;
Jeanne
Re : Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesJeanne,
Si vous modifiez votre premier SQL pour :
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);
Vous devriez importer la table dans JMP.
L'ajout (au cas où il se perdrait dans le JSL) est :
METTRE NOCOUNT SUR ;
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-Bryan
Re : Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesSalut Brian, Merci d'avoir signalé l'ancien fil ; en effet très lié. Question fascinante !
J'ai effectué du débogage en consultant les journaux de test SQL Server que j'ai établis sur mon ordinateur portable. La première remarque est que la même requête (avec des tables temporaires ou des variables de table) exécutée à l'aide de la même connexion DNS/pilote ODBC dans Excel fonctionne correctement, mais pas depuis JMP. Lors de la recherche du trafic entrant vers le serveur, Excel envoie la chaîne de requête telle quelle (par exemple SELECT * FROM Tableau ) mais depuis JMP, la requête arrive au format :
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
Je crois que l'instruction SQL est enveloppée d'éléments supplémentaires par le pilote ODBC. Surtout le système procédure stockée sp_prepexec il semble que ce soit celui qui pose problème. Peut ou non être lié aux guillemets ; difficile de dire ce qui se passe réellement dans cette procédure.
Ok, c'est un problème de pilote ODBC. Cependant, à notre connaissance, ODBC permet également une exécution directe. Je pense que c'est ce qui se passe avec Excel. Cela pourrait-il également être possible avec JMP ? Quelques liens connexes ci-dessous :
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 : Requête SQL vers une source de données ODBC/un serveur SQL avec des tables temporairesBonjour Jannel,
J'espère que ce n'est pas ce vieux problème Importation de SQL à l'aide d'une table temporaire . J'espère que quelqu'un d'autre sur le forum a utilisé plus récemment les tables temporaires SQL Server avec JMP.
Brian Corcoran
Développement JMP