Sql server 在通过OLE DB调用存储过程之前,有没有更快的方法来确定存储过程是否存在? 我请求支持的3D C++应用程序首先检查存储过程是否存在,然后调用任何存储过程:< /P> CWSConnectionPtr spConn = DB::CreateConnection(bstrConnID); _CommandPtr spCmd(__uuidof(Command)); spCmd->PutRefActiveConnection(spConn.GetPtr()); // resets connection spCmd->PutCommandText(bstrQueryName); spCmd->PutCommandType(adCmdStoredProc); spCmd->GetParameters()->Refresh(); // generates SP call for params if(spCmd->GetParameters()->GetCount() == 0) { LOG_ERROR((_T("Stored procedure not found: %s"), (LPCTSTR)bstrQueryName)); _THROW_ERROR(E_FAIL, IDS_MSG_SP_NOT_FOUND); }

Sql server 在通过OLE DB调用存储过程之前,有没有更快的方法来确定存储过程是否存在? 我请求支持的3D C++应用程序首先检查存储过程是否存在,然后调用任何存储过程:< /P> CWSConnectionPtr spConn = DB::CreateConnection(bstrConnID); _CommandPtr spCmd(__uuidof(Command)); spCmd->PutRefActiveConnection(spConn.GetPtr()); // resets connection spCmd->PutCommandText(bstrQueryName); spCmd->PutCommandType(adCmdStoredProc); spCmd->GetParameters()->Refresh(); // generates SP call for params if(spCmd->GetParameters()->GetCount() == 0) { LOG_ERROR((_T("Stored procedure not found: %s"), (LPCTSTR)bstrQueryName)); _THROW_ERROR(E_FAIL, IDS_MSG_SP_NOT_FOUND); },sql-server,visual-c++,oledb,ado,Sql Server,Visual C++,Oledb,Ado,在SQL Server后端,每个存储过程调用转换为以下调用: exec sp_procedure_params_rowset N'procName',1,N'dbo',NULL ADO连接对象在连接字符串中使用provider=SQLOLEDB 在应用程序进一步投资填充参数值(有时使用大blob)之前,是否有更快的方法确保我们将调用一个过程?您可以查询信息架构视图。我知道,但是,是什么让您认为这会更快呢?创建另一个存储过程或函数来检查任何给定存储过程的存在性会更快吗?我认为@ajeh关心的问题

在SQL Server后端,每个存储过程调用转换为以下调用:

exec sp_procedure_params_rowset N'procName',1,N'dbo',NULL
ADO连接对象在连接字符串中使用
provider=SQLOLEDB


在应用程序进一步投资填充参数值(有时使用大blob)之前,是否有更快的方法确保我们将调用一个过程?

您可以查询信息架构视图。我知道,但是,是什么让您认为这会更快呢?创建另一个存储过程或函数来检查任何给定存储过程的存在性会更快吗?我认为@ajeh关心的问题是对SQL的单独调用,以检查任何形式的存在性。是否可以执行一个查询来缓存内存中的所有存储过程(可能是哈希表类型的对象),然后使用它进行快速检查?如果由于任何原因,没有发现sPRC,您可以刷新缓存对象,以确保没有发生模式更改,如果刷新之后仍然不存在,那么您可以认为它不存在吗?