- PR -

SQLServerのVersion情報に関する質問です。

投稿者投稿内容
未記入
会議室デビュー日: 2006/10/25
投稿数: 5
投稿日時: 2006-10-25 16:58
SQLServerに関する質問です。

ODBC接続を介した場合にSQLServerのVersion情報は取得できるのでしょうか?

SQLServer6.5と2000で
「SELECT @@Version」を試したところ

SQLServer6.5は正常に取得できましたが、
SQLServer2000は
  Err.Number 5
  Err.Description「プロシージャの呼び出し、または引数が不正です。」
となってしまいました。


ご存知の方がいらっしゃいましたらお教えください
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2006-10-25 17:24
こんにちは。

引用:

未記入さんの書き込み (2006-10-25 16:58) より:

ODBC接続を介した場合にSQLServerのVersion情報は取得できるのでしょうか?


一般的な方法は、下記を参照されると良いでしょう。
SQL Server のバージョンとエディションを識別する方法
未記入
会議室デビュー日: 2006/10/25
投稿数: 5
投稿日時: 2006-10-25 17:32
早速の解答ありがとうございます。

教えていただいたページも見たのですが
クエリアナライザ等のツールで実行するということでした。
やはりODBC接続を介した取得は不可能ということですかね?

もう少し考えてみます
ありがとうございます。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-10-25 18:10
こんばんは。

引用:

未記入さんの書き込み (2006-10-25 17:32) より:

教えていただいたページも見たのですが
クエリアナライザ等のツールで実行するということでした。
やはりODBC接続を介した取得は不可能ということですかね?


BackDoorさんが提示された情報ではたまたまクエリアナライザを使用して Transact-SQL を実行していたというだけです。
ODBC で接続したプログラムから同じ Transact-SQL を発行すれば良いです。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
未記入
会議室デビュー日: 2006/10/25
投稿数: 5
投稿日時: 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だと違うのでしょうか?


BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2006-10-26 09:30
リプライがあったこと見落としてました。

引用:

未記入さんの書き込み (2006-10-25 19:22) より:

SQLServerのバージョン情報を取得するSQLをVB5プログラム内で実行しています。

SQL発行の仕方が2000だと違うのでしょうか?


SQL Server2000以降で異なった形になってますね。
実は前の回答時も単純に「バージョン情報を取得できれば良い」と思い込んで
いました。
(まさかプログラム中から参照していたとは思いませんでした)

プログラム中からチェックするアルゴリズムを残す必要があるなら、旧バージョン
チェックでエラーが返ったら新バージョンチェックという方法での逃げもあろうか
と思われますが、一般的ではなさそうです。
→ そもそも同一プログラムでバージョンの違うRDBにアクセスする仕様に無理が
  あるのでは? と思われます。
  SQLServer6.5⇒SQLServer2000の移行を推奨します。

# 編集:以下コメントの追加
ue様、フォロー頂きありがとうございました。

[ メッセージ編集済み 編集者: BackDoor 編集日時 2006-10-26 09:32 ]
未記入
会議室デビュー日: 2006/10/25
投稿数: 5
投稿日時: 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がオブジェクト無効となり
正常にデータ取得できませんでした。

なんだかあきらめムードです・・・

いろいろご回答いただきありがとうございます。

oracle
常連さん
会議室デビュー日: 2003/12/04
投稿数: 29
お住まい・勤務地: さいたま
投稿日時: 2006-10-26 10:36
ストアドでそこまで記述してるなら、
ストアドのoutパラメータで取得しちゃえばいいんじゃないの?
rdoならoutの取得できたし、、、、

ストアドのなかで最後にSelectを記述すれば、
暗黙のカーソルが作成されるので、ストアド内の変数に代入した値をselectすれば取得できそうですけど、、、、
それをrdoの結果セットで拾ってあげれば、、、
(rdoでできたかは忘れましたが、、、)

↑のどっちかでできますね



スキルアップ/キャリアアップ(JOB@IT)