Fonctions SQL et select *
Un comportement qu’il faut connaitre quand on utilise des fonctions SQL avec SQL Server. Les fonctions sont optimisées par le moteur et changer le schéma d’une table peut avoir des comportements surprenant.
Créer une table People et y ajouter quelques amis
Créer un fonction simple
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION MyFunction( )
RETURNS TABLE
AS
RETURN
(
SELECT * from People
)
GO
Appeler la fonction et obtenir le résultat escompté
select * from dbo.MyFunction()
Rajouter une colonne Superhero sur la table People et enrichir avec les informations
Rappeler la fonction et être surpris
Solution :
Mettre à jour la fonction même si aucune modification effective n’est réalisée
USE [gla]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[MyFunction]( )
RETURNS TABLE
AS
RETURN
(
SELECT * from People
)
Rappeler la fonction
Conclusion : S’il était encore besoin de le démontrer, le * c’est mal.
L’exemple servant d’illustration est simple mais enrobez cela avec de l’Entity Framework et dans un contexte où vous n’avez pas la main sur les évolutions SQL, cela devient bien plus sympathique.