Dans SQL Server 2005, existe-t-il un concept d'utilisation unique ou de fonction locale déclarée à l'intérieur d'un script SQL ou d'une procédure stockée? Je voudrais résumer une certaine complexité dans un script que j'écris, mais il faudrait être capable de déclarer une fonction.
Juste curieux.
sql
sql-server
sql-server-2005
tsql
scripting
Mark Carpenter
la source
la source
Réponses:
Vous pouvez appeler
CREATE Function
vers le début de votre script etDROP Function
vers la fin.la source
Vous pouvez créer des procédures stockées temporaires telles que:
dans un script SQL, mais pas des fonctions. Vous pourriez cependant avoir le stockage de proc pour obtenir une table temporaire, puis utiliser ces informations plus tard dans le script.
la source
BEGIN
mot - clé et que je remplace leEND
mot - clé parGO
.Les expressions de table communes vous permettent de définir ce qui sont essentiellement des vues qui ne durent que dans le cadre de vos instructions de sélection, d'insertion, de mise à jour et de suppression. En fonction de ce que vous devez faire, ils peuvent être extrêmement utiles.
la source
Je sais que je pourrais être critiqué pour avoir suggéré du SQL dynamique, mais c'est parfois une bonne solution. Assurez-vous simplement de comprendre les implications en matière de sécurité avant d'envisager cela.
la source
Dans les scripts, vous avez plus d'options et une meilleure idée de la décomposition rationnelle. Regardez dans le mode SQLCMD (Menu Requête -> Mode SQLCMD), en particulier les commandes: setvar et: r.
Dans une procédure stockée, vos options sont très limitées. Vous ne pouvez pas créer de définir une fonction directement avec le corps d'une procédure. Le mieux que vous puissiez faire est quelque chose comme ceci, avec SQL dynamique:
Cela se rapproche d'une fonction temporaire globale, si une telle chose existait. Il est toujours visible pour les autres utilisateurs. Vous pouvez ajouter le @@ SPID de votre connexion pour unifier le nom, mais cela nécessiterait alors que le reste de la procédure utilise également le SQL dynamique.
la source
Voici ce que j'ai utilisé dans le passé pour répondre au besoin d'un UDF scalaire dans MS SQL:
Cette approche qui utilise une variable globale pour la PROCÉDURE vous permet d'utiliser la fonction non seulement dans vos scripts, mais aussi dans vos besoins Dynamic SQL.
la source