lancement de requête à partir d'un script générique
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:
1 2
|
$Instruction_Sql="select name,database_id from sys.databases where name = ''MABASE_DD'"; |
Code:
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