- - PR -
SQLServerのVersion情報に関する質問です。
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-10-25 16:58
SQLServerに関する質問です。
ODBC接続を介した場合にSQLServerのVersion情報は取得できるのでしょうか? SQLServer6.5と2000で 「SELECT @@Version」を試したところ SQLServer6.5は正常に取得できましたが、 SQLServer2000は Err.Number 5 Err.Description「プロシージャの呼び出し、または引数が不正です。」 となってしまいました。 ご存知の方がいらっしゃいましたらお教えください | ||||
|
投稿日時: 2006-10-25 17:24
こんにちは。
一般的な方法は、下記を参照されると良いでしょう。 SQL Server のバージョンとエディションを識別する方法 | ||||
|
投稿日時: 2006-10-25 17:32
早速の解答ありがとうございます。
教えていただいたページも見たのですが クエリアナライザ等のツールで実行するということでした。 やはりODBC接続を介した取得は不可能ということですかね? もう少し考えてみます ありがとうございます。 | ||||
|
投稿日時: 2006-10-25 18:10
こんばんは。
BackDoorさんが提示された情報ではたまたまクエリアナライザを使用して Transact-SQL を実行していたというだけです。 ODBC で接続したプログラムから同じ Transact-SQL を発行すれば良いです。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||
|
投稿日時: 2006-10-25 19:22
ご解答ありがとうございます。
とれそうな気がするのですが・・・ SQLServerのバージョン情報を取得するSQLをVB5プログラム内で実行しています。 「SELECT @@Version」 SQLServer6.5の場合正常に取得できますが SQLServer2000の場合、エラーとなり取得できません。 エラー内容は Err.Number 5 Err.Description「プロシージャの呼び出し、または引数が不正です。」 プログラム内容は Public RDO As rdoConnection Public RDS As rdoResultset SqlStr = "SELECT @@VERSION " ★Set RDS = RDO.OpenResultset(SqlStr, rdOpenStatic, rdConcurReadOnly) ★ここで実行エラーとなってしまいます。 試しに、★実行時のSQL分を「SELECT COUNT(*) FROM TABLENAME」に変更し 実行して見たところ正常に取得できました。 SQL発行の仕方が2000だと違うのでしょうか? | ||||
|
投稿日時: 2006-10-26 09:30
リプライがあったこと見落としてました。
SQL Server2000以降で異なった形になってますね。 実は前の回答時も単純に「バージョン情報を取得できれば良い」と思い込んで いました。 (まさかプログラム中から参照していたとは思いませんでした) プログラム中からチェックするアルゴリズムを残す必要があるなら、旧バージョン チェックでエラーが返ったら新バージョンチェックという方法での逃げもあろうか と思われますが、一般的ではなさそうです。 → そもそも同一プログラムでバージョンの違うRDBにアクセスする仕様に無理が あるのでは? と思われます。 SQLServer6.5⇒SQLServer2000の移行を推奨します。 # 編集:以下コメントの追加 ue様、フォロー頂きありがとうございました。 [ メッセージ編集済み 編集者: BackDoor 編集日時 2006-10-26 09:32 ] | ||||
|
投稿日時: 2006-10-26 09:58
ご回答ありがとうございます。
現状では実行時エラーの場合トラップで6.5以降という判断をしています。 ただやはりあまりいい処理方法とは思えずいろいろと考えてみました。 SQLServer6.5⇒SQLServer2000に変更してもらうのはなかなか至難の業でして・・・ プログラム内にて下記内容にてストアドプロシージャを作成実行し、 create procedure dbo.GetVersion as CREATE TABLE #temp (Version TEXT) INSERT INTO #temp select @@version GO 実行し、 EXEC GetVersion その後下記SQLを実行してはいかがなものかと考えました。 SELECT Version FROM #temp ★Set RDS = RDO.OpenResultset(SqlStr, rdOpenStatic, rdConcurReadOnly) しかし、実際同一セッション内ならば有効な#tempがオブジェクト無効となり 正常にデータ取得できませんでした。 なんだかあきらめムードです・・・ いろいろご回答いただきありがとうございます。 | ||||
|
投稿日時: 2006-10-26 10:36
ストアドでそこまで記述してるなら、
ストアドのoutパラメータで取得しちゃえばいいんじゃないの? rdoならoutの取得できたし、、、、 ストアドのなかで最後にSelectを記述すれば、 暗黙のカーソルが作成されるので、ストアド内の変数に代入した値をselectすれば取得できそうですけど、、、、 それをrdoの結果セットで拾ってあげれば、、、 (rdoでできたかは忘れましたが、、、) ↑のどっちかでできますね | ||||
