J'essaie de sélectionner les lignes une par une dans une boucle while dans SQL Server. Et j'utilise la seule façon que je connais pour sélectionner la ligne suivante en utilisant la fonction ROW_NUMBER
. Mais je dois aussi assigner des valeurs aux variables t-sql dans la même instruction SELECT
, donc j'obtiens l'erreur suivante;SELECT() ligne suivante dans l'instruction d'affectation de valeur?
instruction SELECT qui attribue une valeur à une variable ne doit pas être combiné avec des opérations de récupération des données.
Quoi qu'il en soit mon code est comme ceci;
WHILE (@i < 5)
BEGIN
SELECT -- This is where the error occurs
@resultId = video.id, -- this is the value assigning i need to do
ROW_NUMBER() OVER (ORDER BY dateAdded DESC) AS ROWID
FROM videoTest.dbo.video
LEFT JOIN videoTest.dbo.aspnet_Users
ON video.userId=aspnet_Users.UserId
WHERE [email protected] AND ROWID = @i
-- Processing @resultId
SELECT
compilationId
FROM videoTest.dbo.comp
WHERE vidId = @resultId -- i need the id from above
....
....
.....
......
@i = @i + 1
END
Je serais beaucoup apprécié si vous pouvez me montrer moyen de sélection suivant d'une autre manière sans obtenir cette erreur, ou un moyen de résoudre cette erreur dans mon code actuel. Merci.
le code continue à partir de là et j'utilise ces 5 identifiants vidéo différents désolé pour malentendu. Je pense que c'est ce que je cherche, laissez-moi prendre mes chances, merci! – umutto
désolé de ne pas être assez clair plus tôt mais j'ai implémenté votre code mais pas tout à fait trouvé un moyen d'accéder à video.id sur une dernière déclaration. Avec CTE existe-t-il un moyen de sauvegarder le video.id en tant que variable pour une utilisation future? J'ai besoin de @resultId pour les processus plus tard, j'ai mis à jour mon code pour mes besoins. Je vous remercie! – umutto
@umutto: si vous en avez besoin plus tard, vous devez l'insérer dans une variable de table - le CTE n'est valide que pour l'instruction suivante, immédiate –