Bonjour,
J'ai la fonction suivante :
A partir d'une vue, elle me renvoie une table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE OR ALTER FUNCTION xx.MaFonction (@MaRefVARCHAR (25)) RETURNS TABLE AS RETURN (select CodeFamille from [xx].[MaVue] WHERE IDF = (SELECT [xx].[RechercheID] (@MaRef)))
La valeur du critère est établie grâce à la fonction [xx].[RechercheID] qui me renvoie un GUID à partir d'une référence.
Ma fonction [xx].[RechercheID] ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE OR ALTER FUNCTION [RA].[RechercheID] (@MaRef VARCHAR(25) ) RETURNS UNIQUEIDENTIFIER AS BEGIN DECLARE @Resultat NVARCHAR(200) -- Constitution de la requête dynamique SET @Resultat = (Select [IDF] FROM [xx].[MaTable] WHERE Reference = @MaRef) IF @Resultat IS NULL RETURN NULL RETURN @Resultat END GO
Jusque là tout va bien.
Afin de ne pas multiplier les fonctions de recherche d'ID, je voulais faire une fonction avec du SQL dynamique.
Je l'ai créée, elle fonctionne et ressemble à ça :
Le problème est que quand j'essaie de m'en servir depuis ma fonction avec la vue, j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 CREATE OR ALTER PROCEDURE [RA].[RechID] -- Paramètres en entrée : -- ---------------------- @NomTable VARCHAR(50), -- Le nom de la colonne de la référence à rechercher @ColonneRef VARCHAR(25), -- La référence à rechercher @Reference VARCHAR(25), -- Nom de l'ID @ColonneID VARCHAR(25), -- Paramètre en sortie : -- --------------------- -- Renvoie l'ID @ReturnID UNIQUEIDENTIFIER OUTPUT AS SET NOCOUNT ON; -- Requête SQL DECLARE @Requete NVARCHAR(MAX) -- Chaîne à rechercher DECLARE @Chaine VARCHAR(100) -- Stocke le résultat de l'EXEC DECLARE @Resultat NVARCHAR(200) -- Paramètre de la requête DECLARE @Param NVARCHAR(500) -- Ajout des simple côte pour la recherche sur la chaîne de caractère SET @Chaine = '''' + @Reference + '''' -- Constitution de la requête dynamique SET @Requete = 'Select @Resultat = ' + CAST(@ColonneID AS NVARCHAR(100)) + ' FROM ' + CAST(@NomTable AS NVARCHAR(100)) + ' WHERE ' + CAST(@ColonneRef AS NVARCHAR(100)) + ' = ' + CAST(@Chaine AS NVARCHAR(100)) -- Paramètre SET @Param = N'@Resultat UNIQUEIDENTIFIER OUTPUT' -- Exécution de la requête dynamique -- EXEC(@Requete) EXEC sp_executesql @Requete, @Param, @Resultat OUTPUT SELECT @ReturnID = @Resultat IF @Resultat IS NULL RETURN -1 RETURN 0
Quelqu'un aurait une idée ?only functions and some extended stored procedures can be executed from within a function
D'avance merci beaucoup.![]()
Partager