IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème d' incrément rang


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut Problème d' incrément rang
    Bonjour ,

    Afin de repérer les TRANSACTIONS NON commiter, j'ai développé un petit script qui permet d'identifier cette transaction, mais je n'arrive pas à incrémenter ma boucle afin qu'il passe à la BD suivante.

    Ci dessous le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    USE master
    GO
     
    DECLARE @Database nvarchar(100)
    DECLARE @Nb_Db int
    DROP TABLE #DB_temp 
     
    SELECT name INTO #DB_temp 
    FROM sys.databases
    WHERE name NOT IN ('master','msdb','model','tempdb')
     
    SET @Nb_Db = 0
    DECLARE DatabaseCursor CURSOR FOR
            SELECT name FROM #DB_temp
     
    OPEN DatabaseCursor
     
    FETCH NEXT FROM DatabaseCursor INTO @Database
    WHILE @Nb_Db <> (select count(name) from #DB_temp)
    	BEGIN
    		BEGIN TRY
    			--DBCC OPENTRAN(@Database)
    			PRINT 'DBCC OK ' + @Database
    		END TRY
     
    		BEGIN CATCH
    			SELECT
    				ERROR_NUMBER() AS ErrorNumber
    				,ERROR_SEVERITY() AS ErrorSeverity
    				,ERROR_STATE() AS ErrorState
    				,ERROR_PROCEDURE() AS ErrorProcedure
    				,ERROR_LINE() AS ErrorLine
    				,ERROR_MESSAGE() AS ErrorMessage
    		END CATCH
    		SET @Nb_Db = @Nb_Db +1
    	END
    		CLOSE DatabaseCursor
    		DEALLOCATE DatabaseCursor
    Pourriez-vous m'aider ?

    Merci d'avance !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    En effet, il manque un FETCH dans la boucle !

    De plus, pour votre condition de sortie de boucle, vous pouvez vérifier si le curseur à encore des lignes sous le coude :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    USE master
    GO
     
    DECLARE @DATABASE nvarchar(100)
    DROP TABLE #DB_temp 
     
    SELECT name INTO #DB_temp 
    FROM sys.DATABASES
    WHERE name NOT IN ('master','msdb','model','tempdb')
     
    SET @Nb_Db = 0
    DECLARE DatabaseCursor CURSOR FOR
            SELECT name FROM #DB_temp
     
    OPEN DatabaseCursor
     
    FETCH NEXT FROM DatabaseCursor INTO @DATABASE
     
    WHILE @@FETCH_STATUS = 0
    	BEGIN
    		BEGIN TRY
    			--DBCC OPENTRAN(@Database)
    			PRINT 'DBCC OK ' + @DATABASE
    		END TRY
     
    		BEGIN CATCH
    			SELECT
    				ERROR_NUMBER() AS ErrorNumber
    				,ERROR_SEVERITY() AS ErrorSeverity
    				,ERROR_STATE() AS ErrorState
    				,ERROR_PROCEDURE() AS ErrorProcedure
    				,ERROR_LINE() AS ErrorLine
    				,ERROR_MESSAGE() AS ErrorMessage
    		END CATCH
     
    		FETCH NEXT FROM DatabaseCursor INTO @DATABASE
     
    	END
    		CLOSE DatabaseCursor
    		DEALLOCATE DatabaseCursor

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Merci pour cette réponse rapide !!!!

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par Blacknounou Voir le message
    Merci
    de rien

    Citation Envoyé par Blacknounou Voir le message
    pour cette réponse rapide !!!!
    Dans laquelle j'ai omis de retirer le SET @Nb_Db = 0

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Encore une fois le curseur ne sert à rien, et mettre un WHILE dans votre curseur ici ne sert à rien non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SET NOCOUNT ON
    GO
     
    DECLARE @db TABLE
    (
    	database_name sysname
    )
     
    DECLARE @database_name sysname
    	, @sql nvarchar(128)
     
    INSERT	INTO @db (database_name)
    SELECT	name
    FROM	sys.databases
    WHERE	name NOT IN ('master','msdb','model','tempdb', 'ReportServer', 'ReportServerTempDB', 'distribution')
    AND	source_database_id IS NULL -- la BD n'est pas un snashot
    AND	state_desc = 'ONLINE'
     
    WHILE EXISTS
    (
    	SELECT	*
    	FROM	@db
    )
    BEGIN
    	SELECT	TOP (1) @database_name = database_name
    	FROM	@db
     
    	SET	@sql = N'DBCC OPENTRAN (' + @database_name + ')'
    	PRINT	'------------------------' + @database_name + '------------------------'
    	EXEC	(@sql)
     
    	DELETE	FROM @db
    	WHERE	database_name = @database_name
    END
    @++

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 101
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Encore une fois le curseur ne sert à rien, et mettre un WHILE dans votre curseur ici ne sert à rien non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SET NOCOUNT ON
    GO
     
    DECLARE @db TABLE
    (
    	database_name sysname
    )
     
    DECLARE @database_name sysname
    	, @sql nvarchar(128)
     
    INSERT	INTO @db (database_name)
    SELECT	name
    FROM	sys.databases
    WHERE	name NOT IN ('master','msdb','model','tempdb', 'ReportServer', 'ReportServerTempDB', 'distribution')
    AND	source_database_id IS NULL -- la BD n'est pas un snashot
    AND	state_desc = 'ONLINE'
     
    WHILE EXISTS
    (
    	SELECT	*
    	FROM	@db
    )
    BEGIN
    	SELECT	TOP (1) @database_name = database_name
    	FROM	@db
     
    	SET	@sql = N'DBCC OPENTRAN (' + @database_name + ')'
    	PRINT	'------------------------' + @database_name + '------------------------'
    	EXEC	(@sql)
     
    	DELETE	FROM @db
    	WHERE	database_name = @database_name
    END
    @++
    Je prends aussi.

    Merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOS] Problème pour incrémenter un pointeur de chaîne
    Par Weedou dans le forum Assembleur
    Réponses: 1
    Dernier message: 09/04/2007, 21h51
  2. Probléme d'incrémentation d'heure et de minute
    Par Masmeta dans le forum C++Builder
    Réponses: 3
    Dernier message: 28/03/2007, 09h38
  3. Problème d'incrémentation automatique
    Par ist2008 dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 21h21
  4. Problème d'incrémentation automatique
    Par ist2008 dans le forum Access
    Réponses: 1
    Dernier message: 19/04/2006, 15h30
  5. [XSL] Problème d'incrémentation
    Par OXyGN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/01/2005, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo