Dans Sql Server, comment voulez-vous mettre en valeur à partir du curseur dans la table temporaire?
Je suis en train de créer une fonction qui a un curseur. Je veux obtenir le Quanatity de valeur du curseur et de la mettre dans la table temporaire. Mais je n'ai pas réussi à obtenir la valeur et le mettre dans la table temp.
J'ai mis un commentaire où je ne pourrais pas le faire...
voici mon code
alter FUNCTION test(@input VARCHAR(250)) RETURNS Decimal(8, 2) AS BEGIN
DECLARE @rst Decimal(8, 2) SET @rst=0
DECLARE @Temp TABLE (Quantity Decimal(8,2), Price Decimal(8,2))
DECLARE @amount Decimal(8,2)
DECLARE @price Decimal(8,2)
DECLARE CrsOrfLine CURSOR FOR
SELECT AMOUNT FROM LG_001_01_ORFLINE
WHERE LINETYPE = 0
AND ORDFICHEREF = (SELECT TOP 1 LOGICALREF FROM LG_001_01_ORFICHE WHERE GUID='EEB44E72-3717-4F5B-8F7E-6A36EB38EA22')
ORDER BY LINENO_ ASC;
FETCH NEXT FROM CrsOrfLine INTO @amount
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO @Temp (Quantity)
/* HOW AM I SUPPOSED TO ADD IT INTO THE TEMP?????? */
/* I COULDNT FIGURE THIS PART OUT */
FETCH NEXT FROM CrsOrfLine INTO @amount
END /*WHILE*/
CLOSE CrsOrfLine
DEALLOCATE CrsOrfLine
Vous pouvez utiliser
Pourquoi diable êtes-vous à l'aide d'un curseur pour charger une table temporaire?
que suggérez-vous
INSERT...SELECT
Bien que je ne pense pas qu'un curseur est une solution appropriée ici, vous devez également prendre l'habitude de déclarer un curseur approprié pour vos besoins, c'est à dire si vous êtes seulement la lecture à partir de l'utilisation du curseur
INSERT INTO @Temp (Quantity) VALUES (@Amount)
- Cependant il s'agit certainement d'une meilleure façon, la performance de cette fonction sera terrible! Semble comme XY Problème. Vous pouvez décrire ce que vous essayez d'atteindre avec votre fonction et d'obtenir des réponses, plutôt que la manière de contourner un problème dans votre solution.Pourquoi diable êtes-vous à l'aide d'un curseur pour charger une table temporaire?
que suggérez-vous
INSERT...SELECT
Bien que je ne pense pas qu'un curseur est une solution appropriée ici, vous devez également prendre l'habitude de déclarer un curseur approprié pour vos besoins, c'est à dire si vous êtes seulement la lecture à partir de l'utilisation du curseur
READ_ONLY
, si vous ne jamais utiliser FETCH NEXT
, utilisez FORWARD_ONLY
etc. Cela évite l'utilisation de la mémoire redondante et peut améliorer considérablement les performances du curseur.
OriginalL'auteur Arif YILMAZ | 2014-07-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez effectuer les opérations suivantes. Notez qu'il n'insère la quantité de sorte qu'il doit être modifié si vous avez l'intention d'inclure le prix.
Comment voulez-vous obtenir le prix? Vient-il de la même
SELECT
?SÉLECTIONNEZ ORG_PRICE DE LG_XT002001_001 XT002 OÙ XT002.ORF_GUID='EEB44E72-3717-4F5B-8F7E-6A36EB38EA22' ORDER BY ORFLINE_NO DE L'ASC;
J'aimerais réécrire la requête pour obtenir les 2 colonnes dans un select, si possible. Ensuite, vous pouvez soit supprimer
(quantity)
de ma requête ou la modifier à(quantity, price)
.regarde ma solution mise à jour
OriginalL'auteur SQLChao
Édité: Cela devrait aider à prendre soin de le prix. Étant donné que le prix est à venir à partir d'un autre
Select
déclaration, vous pouvez avoir besoin d'unjoin
ici.OriginalL'auteur C.J.
OriginalL'auteur Mohit Jariwal