Bonjour,


Je souhaiterai me connecter à ma base de donnée SQL Server et lancer plusieurs requêtes successives (select....), afin d'en récupérer le résultat dans une variable.

Voici ma première ébauche avec ma chaine de connection qui fonctionne :
Par contre, si je change ma requête en rajoutant une colonne, j'obtiens une erreur. Comment puis je faire pour ne pas avoir à gérer le nombre de colonne. Je veux rediriger le résultat de mes requêtes dans des variables pour pourvoir les exploiter par la suite.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$Instruction_Sql="select name,database_id from sys.databases where name = ''MABASE_DD'";

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
use DBI;
my $Host = 'MonServeur,1433';
my $DataBase = 'MABASE_DD';
my $UserSql = 'sa';
my $Password = 'girafe789';
 
my $Instruction_Sql;
my $ListeBases1;
my @TableauBase;
my $DNS;
 
sub Execution_Requete_SQL ()
{
 
	$DNS = "Provider=sqloledb;Trusted Connection=yes;";
	$DNS .= "Server=$Host;DataBase=$DataBase";
	my $ConnectionSql = DBI->connect("dbi:ADO:$DNS",
			           $UserSql,
			           $Password,
				{ RaiseError => 1, AutoCommit => 1}
				) || die "DataBase connection not made: $DBI::errstr";
 
	#Preparation de l'instruction sql
	#----------------------------------
	my $CmdSql = "${Instruction_Sql}";
	my $ListeBases = $ConnectionSql->prepare( $CmdSql );
 
 
	#Execute l'instruction
	#------------------------
	$ListeBases->execute();
 
 
	# Lie le resultat aux variables locales	
	#-----------------------------------------
	my ( $UneBase );
	$ListeBases->bind_columns( undef, \$UneBase );
 
 
	#Récupére la valeur du jeu de résultat
	#--------------------------------------
	while( $ListeBases->fetch() )
	{
		@TableauBase=(@TableauBase,$UneBase) ;
	}
 
	#Fermeture de la connection
	#-------------------------------
	$ListeBases->finish();
	$ConnectionSql->disconnect();
 
}
 
 
 
$Instruction_Sql="select name from  sys.DataBases  where name <> 'tempdb'";
 
 
Execution_Requete_SQL ;
 
 
print "@TableauBase\n";
print "=====\n";
my $One;
foreach $One (@TableauBase)
	{
			chomp ($One);
			print ">$One\n";
 
	}

Merci pour votre aide