2016-11-23 97 views
3

的SQL文本我使用ODBC API来创建一份准备好的声明:检索ODBC准备好的声明

SQLPrepare(hstmt, "INSERT INTO t (date) VALUES (?)", SQL_NTS); 

一旦SQLPrepare成功完成,该声明是通过hstmt手柄访问。

只有hstmt句柄,是否有任何方式,ODBC API调用或其他方式来检索与预准备语句相关联的SQL文本?

换句话说,有没有什么方法可以找出什么SQL传递给SQLPrepare调用?

我只发现SQLNativeSql函数,但它只允许解析和验证SQL文本,所以它的工作原理有点像无操作SQLPrepare。这不是我要找的。尽管我希望找到一个通用的普通ODBC解决方案,而不是特定于任何DBMS,但我主要使用SQL Server的Microsoft ODBC驱动程序连接到SQL Server。

+1

在DBMS是你的工作? – MtwStark

回答

1

我不知道是否有在ODBC API包裹的方法/函数,
但你可以尝试直接从数据库调用它

select * from sys.dm_exec_sql_text(@sql_handle) 
+1

虽然我不能接受它作为答案,但我很欣赏它作为一个有趣的替代解决方案。对于记录/其他读者,这里是更完整的示例,显示了使用“sys.dm_exec_requests.sql_handle”列http://stackoverflow.com/a/31968654/151641 – mloskot