sp_execute に渡すハンドル値を取得できません。Management Studio で SQL コードを直接使用すると、成功します。
Declare @handle Integer
exec sp_prepare @handle OUTPUT, N'@year int', N'SELECT * from Sales.CreditCard where ExpYear=@year';
select @handle
exec sp_execute @handle, 2007
exec sp_unprepare @handle
しかし、VBで次のコードを試してみると、コマンドの実行後に「param3.Value」が「何もありません」です。
ConnString = "DRIVER={SQL Server};SERVER=192.168.100.41,1433;UID=sa;PWD=<password>;DATABASE=AdventureWorks"
'create an instance of the ADO connection
Connection = CreateObject("ADODB.Connection")
'Open the connection to the database
Connection.Open(ConnString)
Dim cmd As ADODB.Command
Dim param1 As ADODB.Parameter
Dim param2 As ADODB.Parameter
Dim param3 As ADODB.Parameter
cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = Connection
cmd.CommandText = "sp_prepare"
param1 = cmd.CreateParameter("@handle", 3, 2, 4, 0)
param2 = cmd.CreateParameter("@params", 202, 1, 200, "@year Integer")
param3 = cmd.CreateParameter("stmt", 202, 1, 200, "SELECT TOP 4 [CreditCardID],[CardType],[CardNumber],[ModifiedDate] FROM [AdventureWorks].[Sales].[CreditCard] where [ExpYear] in (@year)")
cmd.Parameters.Append(param1)
cmd.Parameters.Append(param2)
cmd.Parameters.Append(param3)
cmd.Execute()
Debug.WriteLine("handle:" & param1.Value)
VBで動作させる方法を知っていますか?これを VB から実行する理由は、コマンドを RPC 経由で実行する必要があるためです。