Appels de fonction avec du SQL dynamique
Bonjour,
J'ai la fonction suivante :
Code:
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))) |
A partir d'une vue, elle me renvoie une table.
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:
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 :
Code:
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 |
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 :
Citation:
only functions and some extended stored procedures can be executed from within a function
Quelqu'un aurait une idée ?
D'avance merci beaucoup. ;);););)