J'utilise la requête T-SQL directement dans la fenêtre de requête de Microsoft SQL Server Management Studio contre un grand Oracle DB, et mon serveur SQL est 2005.Utilisation de T-SQL avec Oracle DB
J'ai créé un serveur lié comme myOracleServer. En utilisant la requête T-SQL suivante:
SELECT COUNT(*) FROM myOracleServer..owner.myTable WHERE id = 1000 AND Dt = '2009-02-26'
Il faut plus d'une minute pour effectuer un seul appel. Pour une table de petite taille, c'est OK, mais myTable sur Oracle est très grand avec des millions de lignes de données. Ce que j'ai découvert, c'est que je pourrais utiliser OPENQUERY pour faire un appel similaire avec une requête SQL en tant que pass-through. Le résultat est très rapide. L'heure d'exécution est 00:00:02! Le problème que j'ai est que la requête n'est pas une chaîne constante. Je peux changer id et les valeurs Dt dans la requête, quelque chose comme:
'SELECT COUNT(*) FROM ownwer.myTable WHERE id = ' + CAST(@id AS VARCHAR)...
OPENQUERY ne supporte pas une variable sous forme de chaîne de requête, ni expression.
Existe-t-il un autre moyen d'obtenir la requête directe auprès d'Oracle avec des performances rapides?
comme je l'ai mentionné OPENQUERY prend en charge la variable. Voir msdn pour OPENQUERY. –
désolé pour faute de frappe: ne supporte pas ... –
Ouais, je viens de le regarder. En dehors de la boîte, vous pourriez créer un sproc "temp" avec la déclaration, mais ce serait un peu exagéré à moins que la différence de perf était absolument magnifique. Je me demande si un proc CLR est une option. –