...具体的には、MSSQL 2005 の fn_listextendedproperty システム関数。
「schemaVersion」という名前の拡張プロパティをデータベース オブジェクトに追加しました。私の MSVC アプリケーションでは、ADO を使用して、その拡張プロパティが存在するかどうかを判断し、存在する場合はそこから文字列値を返す必要があります。
これが、私が望むことを行う T-SQL コードです。これを C++/ADO で記述するにはどうすればよいですか。
select value as schemaVer
from fn_listextendedproperty(default, default, default, default, default, default, default)
where name=N'schemaVersion'
これが私が最初に試したコードです。コードの下にリストされているエラーで失敗しました:
_CommandPtr cmd;
cmd.CreateInstance(__uuidof(Command));
cmd->ActiveConnection = cnn;
cmd->PutCommandText("select value "
"from fn_listextendedproperty(default, default, default, default, default, default, default) "
"where name=N'schemaVersion'");
VARIANT varCount;
cmd->Execute(NULL, NULL, adCmdText);
...ここに、ADO エラー コレクションから取り出したエラーを示します。出力は、スレッド ID などの余分なテキストを追加する私の小さなユーティリティ関数からのものなので、無視してください。
(Proc:0x1930, Thread:0x8A0) INFO : === 1 Provider Error Messages : =======================
(Proc:0x1930, Thread:0x8A0) INFO : [ 1] (-2147217900) 'Incorrect syntax near the keyword 'default'.'
(Proc:0x1930, Thread:0x8A0) INFO : (SQLState = '42000')
(Proc:0x1930, Thread:0x8A0) INFO : (Source = 'Microsoft OLE DB Provider for SQL Server')
(Proc:0x1930, Thread:0x8A0) INFO : (NativeError = 156)
(Proc:0x1930, Thread:0x8A0) INFO : ==========================================================
編集: 提案に従って呼び出しを更新しました。また、「SELECT value AS schemaVer」を単に「SELECT value」に変更しました。
編集: 提案ごとに Execute() の最初のパラメーターを NULL に変更しました。これで元の問題が解決し、次の問題に進みました。:)