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 avec sp_executesql


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Par défaut Problème avec sp_executesql
    Bonjour j'essaie d'exécuter une requête sur plusieurs base d'un serveur. Cette requête doit me ramener une valeur pour insertion. Je me suis fait une procédure pour ça mais elle plante à l'exécution. Cette procédure doit recurper la taille des fichier mdf de chaque base et stoker les valeur dans une table.

    Mon problème vient de l'utilisation de sp_executesql que je ne maitrise pas encore correctement.

    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
    40
    41
    42
    43
    44
    45
    procedure [dbo].[mesurer_taille_bases]
    as
    begin
    	set nocount on
     
    	declare @tmp_taille int
    	declare @tmp_pk_id_base uniqueidentifier
    	declare @tmp_nom_base nvarchar(100)
    	declare @tmp_requete nvarchar(500)
    	declare @tmp_param_def nvarchar(500)	
     
    	declare liste_base_cursor cursor 
    	for select pk_id, nom from base
     
    	open liste_base_cursor
    	fetch next from liste_base_cursor into @tmp_pk_id_base, @tmp_nom_base
     
    	while @@fetch_status = 0
    	begin
    --		select @tmp_taille= 8 * SUM(CONVERT(DEC(15),SIZE)) FROM dbo.sysfiles where name like '%data'
    		set @tmp_requete = N'select @tmp_tailleOUT OUT = 8 * SUM(CONVERT(DEC(15),SIZE)) FROM '+@tmp_nom_base+'.dbo.sysfiles where name like ''%data'''
    		set @tmp_param_def = N'@tmp_tailleOUT int OUTPUT'
     
    		exec sp_executesql @tmp_requete, @tmp_param_def, @tmp_tailleOUT=@tmp_taille OUTPUT
     
    		insert into taille_base
    		(
    			pk_id,
    			fk_base,
    			taille,
    			date_etalonnage
    		)
    		values
    		(
    			newid(),
    			@tmp_pk_id_base,
    			@tmp_taille,
    			getdate()
    		)
    		fetch next from liste_base_cursor into @tmp_pk_id_base, @tmp_nom_base	
    	end
     
    	close liste_base_cursor
    	deallocate liste_base_cursor
    end
    Voilà ce que j'obtiens comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Msg*102, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers '='.
    Msg*515, Niveau*16, État*2, Procédure*mesurer_bases, Ligne*27
    Impossible d insérer la valeur NULL dans la colonne taille, table GESEXPSR2.dbo.taille_base. Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.
    L instruction a été arrêtée.
    Msg*102, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers '='.
    Msg*515, Niveau*16, État*2, Procédure*mesurer_bases, Ligne*27
    Impossible d insérer la valeur NULL dans la colonne taille, table GESEXPSR2.dbo.taille_base. Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.
    L instruction a été arrêtée.
    Quelqu'un à une solution?

  2. #2
    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,

    Si vous êtes sous SQL Server 2005 ou 2008, regardez sys.master_files, et si vous êtes sous SQL Server 2000 : sysaltfiles.

    @++

  3. #3
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonjour,

    sp_spaceused @updateusage = 'TRUE' ne convient pas ?

    @+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Si vous êtes sous SQL Server 2005 ou 2008, regardez sys.master_files, et si vous êtes sous SQL Server 2000 : sysaltfiles.

    @++
    Je suis sous 2005 et il y a effectivement ce qu'il me faut dans sys.master_files. Je connaissais pas cette table. Avec sys.databases, j'arrive à obtenir mes informations bien plus facilement qu'avec la méthode que j'utilisais.

    Merci beaucoup elsuket.

    Citation Envoyé par agemis31
    Bonjour,

    sp_spaceused @updateusage = 'TRUE' ne convient pas ?

    @+
    Je t'avoue que j'ai pas testé ta méthode car je comprend pas bien ce que tu veux dire.

  5. #5
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    La procédure sp_spaceused permet de connaitre l'espace occupé pour une table ou bien diretement pour la base (c'est l'option proposée par agemis31)

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

Discussions similaires

  1. [2008R2] problème avec sp_executesql
    Par jmclej dans le forum Développement
    Réponses: 8
    Dernier message: 19/02/2013, 12h37
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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