SELECT col1,
col2,
col3,
EXEC GetAIntFromStoredProc(T.col1) AS col4
FROM Tbl AS T
WHERE (col2 = @parm)
Comment écrire cette requête SQL dans SQL Server 2008?
Merci @ Twoleggedhorse.
Voici la solution.
D'abord nous avons créé une fonction
CREATE FUNCTION GetAIntFromStoredProc(@parm Nvarchar(50)) RETURNS INTEGER
AS
BEGIN
DECLARE @id INTEGER
set @id= (select TOP(1) id From tbl where col=@parm)
RETURN @id
END
alors nous faisons la requête select
Select col1, col2, col3,
GetAIntFromStoredProc(T.col1) As col4
From Tbl as T
Where col2=@parm
Les fonctions sont faciles à appeler dans une boucle de sélection, mais elles ne vous permettent pas d'exécuter des insertions, des mises à jour, des suppressions, etc. Elles ne sont utiles que pour les opérations de requête. Vous avez besoin d'une procédure stockée pour manipuler les données.
Donc, la vraie réponse à cette question est que vous devez parcourir les résultats d'une instruction select via un "curseur" et appeler la procédure à partir de cette boucle. Voici un exemple:
DECLARE @myId int;
DECLARE @myName nvarchar(60);
DECLARE myCursor CURSOR FORWARD_ONLY FOR
SELECT Id, Name FROM SomeTable;
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myId, @myName;
WHILE @@FETCH_STATUS = 0 BEGIN
EXECUTE dbo.myCustomProcedure @myId, @myName;
FETCH NEXT FROM myCursor INTO @myId, @myName;
END;
CLOSE myCursor;
DEALLOCATE myCursor;
Notez que @@FETCH_STATUS
est une variable standard mise à jour pour vous. Le reste des noms d'objet ici sont personnalisés.
Tant que vous n'effectuez aucune instruction INSERT ou UPDATE dans votre procédure stockée, vous souhaiterez probablement en faire une fonction.
Les procédures stockées sont destinées à être exécutées par un programme externe ou sur un intervalle de temps.
Les réponses ici expliqueront mieux que je peux:
Vous pouvez créer une table temporaire correspondant à votre sortie proc et y insérer.
CREATE TABLE #Temp (
Col1 INT
)
INSERT INTO #Temp
EXEC MyProc