IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Voir le flux RSS

SQLpro

Souci suite � la Migration de bases de 2014 vers 2019

Note : 2 votes pour une moyenne de 3,00.
par , 20/01/2024 � 10h18 (821 Affichages)
Citation Envoy� par ulmeen Voir le message
Bonjour (et bonne ann�e 2024)

Je rencontre un souci suite � la migration de mon serveur SQL de 2014 � 2019

J'ai une fonction scalaire fn_IdentiteNomPrenomCodeCEA qui renvoi une chaine

Code : S�lectionner tout - Visualiser dans une fen�tre � part
SELECT dbo.fn_IdentiteNomPrenomCodeCEA(CodeUtil) as IdentiteCIInverse
donne ceci sur mon serveur 2014
NOM PRENOM BADGE

Lanc�e sur mon serveur 2019, j�ai une erreur de requ�te
Msg 208, Level 16, State 1, Procedure fn_IdentiteNomPrenomCodeCEA, Line 48
Nom d'objet 'Annuaire.dbo.AnnuaireUnifie' non valide.

La fonction regarde sur quel serveur elle est lanc�e pour choisir la base concern�e
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
       set @serveur=@@SERVERNAME
       set @Regime=(SELECT Regime FROM ParamServeurAppliSTIC.dbo.ServeursSQL WHERE NomServeur=@@servername)

       if(@Regime='Test') set @Retour= (SELECT Nom+' '+Prenom+' '+CodeCEA FROM TestAnnuaire.dbo.AnnuaireUnifie WHERE ConnectId=@Code)
       else set @Retour= (SELECT Nom+' '+Prenom+' '+CodeCEA FROM Annuaire.dbo.AnnuaireUnifie WHERE ConnectId=@Code)
Ma variable @Regime=Test donc seule la 1� requ�te est sens�e s'ex�cuter
Mais il semble que la fonction veuille quand m�me interpr�ter la requ�te du else

Ce type de test est tr�s pr�sent dans mes proc�dures stock�es et fonctions diverses. Ce serait un gros souci pour moi si je devais l�abandonner.

Avez-vous une id�e ?

Merci
En fait ce qui s'est pass� a �t� pr�vu par SQL Server...

Depuis la version 2017, Microsoft a beaucoup travaill� sur de nouvelles optimisations dans le cadre d'un projet appel� "Intelligent Query Processor" (IQP), dont l'une des fonctionnalit� consiste � supprimer l'appel de la fonction (UDF) en l'int�grant directement dans la requ�te afin que le tout soit optimis�. Cela s'appelle l'inligning (enlignement)...
En effet, les requ�tes ont un comportement ensembliste (toutes les op�rations s'effectuent en m�me temps <=> parall�lisme) alors qu'une fonction est toujours it�rative (c'est � dire que le code se d�roule s�quentiellement) ce qui fait que l'introduction de fonctions dans le code d'une requ�te casse ordinairement le fonctionnement ensembliste de la requ�te et la rend it�rative et par cons�quent lente... Pour palier � ce probl�me de performance Microsoft Research a initi� le projet "FROID" a eut pour but de r�crire les requ�tes en r�int�grant le code SQL de la fonction dans la requ�te. . On obtient alors une requ�te parfaitement ensembliste et les performances n'ont plus rien � voir....
Cependant, ce mode a un inconv�nient : il �tudie toutes les possibilit�s d'ex�cution simultan�ment, alors que l'it�ration dans le code d'une UDF coupe des branches via les commande de contr�le telles que IF THEN ELSE...
Sachant cela, il y a quelques rares cas ou cet "enlignement" de la fonction peut devenir un probl�me et c'est votre cas... En effet, une requ�te est compil�e d'un seul bloc et l'absence de certains objets � ce moment peut se r�v�ler critique...
Pour palier � cet effet de bord, Microsoft SQL Server a rajout� une option dans la cr�ation des fonctions (INLINE = OFF) afin d'interdire l'enlignement d'une UDF au cas ou cela produirait une anomalie...

Vous �tes tomb� dessus !

A +

Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Viadeo Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Twitter Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Google Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Facebook Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Digg Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Delicious Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog MySpace Envoyer le billet � Souci suite � la Migration de bases de 2014 vers 2019 � dans le blog Yahoo

Commentaires