chercher de l'enregistrement à partir du curseur dans SQL
j'ai la liste des dossiers et ont créé le curseur d'une boucle sur chaque dossier et de vérifier certaines condition et le retour de registre si elle remplit mon curseur est comme suit :
DECLARE @ID int
DECLARE @FromDate datetime, @ToDate datetime
DEClare @expid as int
set @expid = 839
DECLARE IDs CURSOR FOR
select patpid,fromdate,todate from tdp_ProviderAccomodationTariffPlan where fk_patid = 162 and fk_pacid = 36
OPEN IDs
FETCH NEXT FROM IDs into @ID,@FromDate,@ToDate
WHILE @@FETCH_STATUS = 0
BEGIN
print @ID
print @FromDate
print @ToDate
--SELECT patpid,rate,SType FROM tdp_ProviderAccomodationTariffPlan
--WHERE ('2012-12-27' BETWEEN @FromDate AND @ToDate) and fk_patid = 162 and fk_pacid = 36
FETCH NEXT FROM IDs into @ID,@FromDate,@ToDate
END
CLOSE IDs
DEALLOCATE IDs
dans la boucle d'extraction du curseur d'enregistrement dont l'id est '839' , Merci de m'aider à résoudre le problème.
Quel est votre problème? Le curseur est l'extraction des données erronées? Pouvez-vous montrer la source de données?
je veux extraire dossier ayant pour id = 839 de la boucle , le voir, j'ai commenté une instruction select dans le code où je veux écrire instruction select qui retourne uniquement un enregistrement où id est de 839 comment dois-je faire
Encore n'a pas l'obtenir. Pourquoi utilisez-vous le curseur? Utilisez simplement
j'ai instruction select "sélectionnez patpid,fromdate,jour de tdp_ProviderAccomodationTariffPlan où fk_patid = 162 et fk_pacid = 36" qui me renvoie 7 dossiers. chaque enregistrement renvoie fromdate et à jour , je veux vérifier ma date de ce fait il se trouve entre fromdate à jour, alors il sera de retour dat record
Ok, vous avez déjà votre requête écrite, vous avez commenté. Pourquoi il ne fonctionne pas pour vous? Ne pas utiliser
je veux extraire dossier ayant pour id = 839 de la boucle , le voir, j'ai commenté une instruction select dans le code où je veux écrire instruction select qui retourne uniquement un enregistrement où id est de 839 comment dois-je faire
Encore n'a pas l'obtenir. Pourquoi utilisez-vous le curseur? Utilisez simplement
SELECT
déclaration avec WHERE
clausej'ai instruction select "sélectionnez patpid,fromdate,jour de tdp_ProviderAccomodationTariffPlan où fk_patid = 162 et fk_pacid = 36" qui me renvoie 7 dossiers. chaque enregistrement renvoie fromdate et à jour , je veux vérifier ma date de ce fait il se trouve entre fromdate à jour, alors il sera de retour dat record
Ok, vous avez déjà votre requête écrite, vous avez commenté. Pourquoi il ne fonctionne pas pour vous? Ne pas utiliser
CURSOR
, essayez d'utiliser votre commenté requêteOriginalL'auteur DharaPPatel | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
Remplacer votre curseur avec les boucles WHILE pour le gain de performances plus rapides comme suit:
OriginalL'auteur ZooZ
Puisque vous avez une liste de dates, vous devez déclarer le curseur pour que la liste, pas pour
tdp_ProviderAccomodationTariffPlan
:Mais je vous recommande d'éviter de l'utilisation de curseurs. Il est plus facile et plus rapide de le faire .NET code
OriginalL'auteur Andrey Gordeev
@Zooz votre idée n'est pas assez bon, si supprimé certains d'enregistrement dans le passé, vous avez un problème avec l'index parce que l'indice n'a pas de valeur correcte pour votre clause where.
et une table a souvent quelques enregistrements supprimés.
OriginalL'auteur Ali.azimi