Est-ce que nous traitons toujours la logique de rupture de contrôle dans les curseurs SQLSQL curseur Traitement de contrôle Pause logique
Fondamentalement, ce que je veux faire est de boucle à travers une liste de comptes et si le prochain nom de compte est le même que le le précédent fait beaucoup de choses font beaucoup d'autres choses.
L'exemple ci-dessous liste uniquement tous les comptes et le nombre de fois qu'ils apparaissent dans la liste. Idéalement, je ferai plus de traitement dans chaque cas (comme appeler plusieurs procs stockés). Y a-t-il une autre façon de faire cela?
DECLARE @CompanyName NVARCHAR(255)
DECLARE @CompanyNameHold NVARCHAR(255)
DECLARE @TESTCOUNT INT
DECLARE @TOTALCOUNT INT
SELECT @CompanyNameHold = ''
SELECT @TESTCOUNT = 0
SELECT @TOTALCOUNT = 0
DECLARE ImportCursor CURSOR FOR
SELECT [Company Name]
FROM [MyDB].[dbo].[AccountsToImport]
ORDER BY [Company Name]
OPEN ImportCursor
FETCH NEXT FROM ImportCursor INTO @CompanyName
WHILE @@FETCH_STATUS = 0
BEGIN
--Check HoldCompanyName = CompanyName
IF (@CompanyName <> @CompanyNameHold)
BEGIN
--PROCESS NEW ACCOUNT
IF @TESTCOUNT = 0 --PRIMER
SET @CompanyNameHold = @CompanyName
ELSE
PRINT CAST(@TESTCOUNT AS NVARCHAR) + ' - ' + @CompanyNameHold
SET @TESTCOUNT = 1
END
ELSE
BEGIN
--ADD TO EXISTING
SET @TESTCOUNT = @TESTCOUNT + 1
END
--Move CompanyName to HoldCompanyName
SET @CompanyNameHold = @CompanyName
SET @TOTALCOUNT = @TOTALCOUNT + 1
FETCH NEXT FROM ImportCursor INTO @CompanyName
END
--Process Last Record
PRINT CAST(@TESTCOUNT AS NVARCHAR) + ' - ' + @CompanyNameHold
CLOSE ImportCursor
DEALLOCATE ImportCursor
Vous pouvez ajouter une sous-requête corrélée au SELECT pour sélectionner NextCompanyName. Vous obtiendrez une valeur NULL pour la dernière société. – HABO