Etant donnée une procédure stockée comme vous indiqué:
CREATE PROCEDURE PostIdSelect
@PostDate datetime
AS
SELECT id FROM Post WHERE DateCreated = @PostDate
Ceci peut être utilisé sans modification en capturant l'ensemble de lignes dans une table:
DECLARE @PostID int
CREATE TABLE #PostIDs (PostID int)
INSERT #PostIDs EXEC PostIdSelect @TodaysDate
SELECT @PostID = TOP 1 PostID FROM #PostIDs
-- use @PostID
Une autre façon de le faire, si vous voulez toujours retourner une seule ligne, est d'utiliser un paramètre de sortie, ce qui nécessite de modifier votre procédure stockée:
CREATE PROCEDURE PostIdSelect2
@PostDate datetime,
@PostID int OUT
AS
SELECT TOP 1 @PostID = id FROM Post WHERE DateCreated = @PostDate
en utilisant comme ceci:
DECLARE @PostID int
EXEC PostIdSelect2 @TodaysDate, @PostID OUT
-- use @PostID
Notez que avec ces deux méthodes, vous ne pouvez pas passer sous silence l'idée qu'il pourrait y avoir plusieurs PostIDs. Avec la première méthode d'insertion de table, vous pouvez faire quelque chose avec chaque ligne individuellement, ou même vous joindre à la table. Il serait préférable de joindre à la table, mais si vous devez faire quelque chose avec chaque ligne individuellement, un curseur en lecture seule est plus rapide que vous-même.
devrait être SELECT @PostId = id de Postes OÙ DateCreated = @PostDate ?? –
N'oubliez pas d'affecter l'ID à @PostId dans le sproc PostIdSelect :) .... SELECT @PostId = id FROM Post WHERE DateCreated = @PostDate. Le point DateCreated fait est également crucial, d'accord avec cela – AdaTheDev
"Syntaxe incorrecte près '='." Lorsque j'essaie de CHOISIR @PostId = id FROM Post WHERE DateCreated = @PostDate, cela ne semble pas fonctionner, pourquoi? – Marcus