テーブルから SQL Server インスタンス名を取得するスクリプトを作成し、これらの各インスタンスに接続してデータベース構成情報を取得しようとします。関連するすべてのデータベース インスタンスは、SQL Server の特定のバージョンです。接続が失敗した場合 (パスワードが間違っている、インスタンスがダウンしているなど)、ユーザー定義のエラー メッセージ (「$inst に接続できません、スキップしています。」) を出力し、リストを続行します。ODBC (SQL Server Native Client 10.0) からの既定のエラー メッセージを抑制することができません。
接続は次のように試行されます。
eval {
my $dbh = DBI->connect(
"dbi:ODBC:Driver={SQL Server Native Client 10.0};Server=<instance_name>;Uid=<user_name>;Pwd=<password>;",
{ PrintError => 0, RaiseError => 1, AutoCommit => 1 }
);
};
PrintError => 0 はエラーメッセージを抑制し、RaiseError => 1 は connect メソッドが失敗した場合に DBI を停止させるというのは私の (おそらく間違った) 理解です。定義されたメッセージ。私は HandleError 属性も調べましたが、成功していません。
これは完全に非現実的なシナリオですか、それとも私が使用している ODBC ドライバーの結果ですか?
bohica の提案によると、作業コードは次のようになります。
eval {
my $dbh = DBI->connect(
"dbi:ODBC:Driver={SQL Server Native Client 10.0};Server=<instance_name>;",
"Username",
"Password",
{ PrintError => 0, RaiseError => 1, AutoCommit => 1 }
);
};
ユーザー名とパスワードは接続文字列から移動され、個別のパラメーターとして DBI 接続メソッドに渡されました。