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?