web-dev-qa-db-fra.com

Fonction temporaire ou procédure stockée dans T-SQL

Est-il possible de créer une procédure ou une fonction stockée temporaire sur MS SQL 2005? Je souhaite utiliser cette procédure stockée uniquement dans ma requête, donc après l'exécution, elle disparaîtra.

J'ai une requête que j'aimerais EXEC sur certaines données. Mais pour chaque table que je traiterai cette commande, je dois en changer certaines parties. J'ai donc pensé créer temporairement SP qui retournerait pour moi une requête à partir des arguments que je fournirais (comme le nom de la table, etc.) et exécuter cette requête par EXEC.

Et cette procédure stockée ne sera pas utile pour moi plus tard, donc je voudrais qu'elle soit temporaire afin que lorsque je termine l'exécution de ma requête - elle disparaisse.

35
Tomasz Smykowski

Pour votre modification, il semble que vous devriez utiliser sp_ExecuteSQL contre un nvarchar (paramétré) qui contient TSQL.

Recherche sur sp_ExecuteSQL; un exemple simple:

DECLARE @SQL nvarchar(4000),
 @Table varchar(20) = 'ORDERS',
 @IDColumn varchar(20) = 'OrderID',
 @ID int = 10248

 SET @SQL = 'SELECT * FROM [' + @Table + '] WHERE ['
  + @IDColumn + '] = @Key'

  EXEC sp_executesql @SQL, N'@Key int', @ID

Notez que les noms de table et de colonne doivent être concaténés dans la requête, mais les valeurs (telles que @Key) peut être paramétré.


Il existe une procédure stockée temporaire - mais elle se fait par connexion et non par sp.

Cependant, vous voudrez peut-être regarder les expressions de table communes - elles peuvent être ce que vous recherchez (bien que vous ne puissiez les lire qu'une seule fois).

Peut-être que si vous pouvez clarifier ce que vous essayez de faire?

27
Marc Gravell

Cette question est un peu ancienne, mais les autres réponses n'ont pas fourni la syntaxe pour créer des procédures temporaires. La syntaxe est la même que pour les tables temporaires: #nom pour les objets temporaires locaux, ## nom pour les objets temporaires globaux.

CREATE PROCEDURE #uspMyTempProcedure AS
BEGIN
  print 'This is a temporary procedure'
END

Ceci est décrit dans la section "Nom de la procédure" de la documentation officielle. http://technet.Microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx

J'utilise cette technique pour dédupliquer le code de mes tests unitaires T-SQL primitifs. Un véritable framework de tests unitaires serait mieux, mais c'est mieux que rien et les "ramasse-miettes" après lui-même.

30
ensslen