Bonjour,
Effectivement, GO est une instruction pour l'utilitaire en lignes de commandes SQLCMD avec lequel SQL Server Management Studio interagit. Toute création de module (procédure stockée, fonction, déclencheur) doit être unique : il ne peut y avoir d'autre instruction dans le lot. On sépare les lots à l'aide de GO ;)
En ce qui concerne l'expression de votre requête, vous pouvez vous inspirer de ce que j'ai donné
ici. Je vous déconseille l'utilisation de fonctions scalaires, car leur exécution est contre-performante par nature : de telles fonctions sont exécutées ligne de résultat par ligne de résultat. Supposons donc que votre requête retourne 1000 lignes : la fonction scalaire sera appelée 1000 fois. On peut s'en rendre compte à l'aide de SQL Profiler.
En revanche, si vous créez une fonction de table
en ligne, celle-ci est appelée une seule fois pour l'ensemble des lignes de résultat, ce qui est de la même nature que SQL : ensembliste et en conséquence performant.
@++ ;)