我想获取一段sql语句在 mssql2005下解析成的语句,
主要是想获取这个sql所用到的所有的表的名字。(ps:复杂的sql语句的)
请高手帮忙  在线等~  
我的意思是要从用户输入的sql语句中提取该语句中所用的表
或者是:
sql 执行的步骤1. 解析器第 1 阶段是解析器阶段,它将 SQL 文本转换成语法树。这个阶段不查找系统目录中的任何信息,不访问数据库。 2. 语义分析第 2 阶段分析由解析器创建的语法树,并产生用于查询的查询控制块和表达式树。要构建这些内部数据结构,它执行以下操作: 验证对象 
解析 UDR 
如果可能的话,消除常量 
验证对象 第 2 阶段访问数据库中不同的系统目录,以验证查询所引用的所有数据库对象(诸如表、列、视图、类型、UDR 等等)是否都存在。它在数据库中找到这些对象的标识,然后创建查询控制块和表达式树。 我要的就是验证对象步骤里的表的信息

解决方案 »

  1.   

    exec sp_depends 存储过程名
      

  2.   

    oracle 里面如果同一条sql语句执行第二次,那么第二次不用做语法分析,节省了语法分析的时间;
    不知道sqlserver2005里面是否有这咱算法?楼主问的问题带有专业性很强,其中包括算法和理论,都是比较深刻的,看来从csdn里面找人回答这个问题,能说清楚的有几个?
      

  3.   

    楼主的这个问题还真是比较牛。这个应该属于编译原理方面的问题吧。
    楼主的问题和这个是否相类似:以C++为例,void foo(int x, int y);
    该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。那么有没有可能获得编译或者执行过程中该函数所产生的名字呢?觉得这应该是在sql编译器(姑且这么称之)中对sql进行一定的词法分析后,然后验证对象,这个过程是编译器内部进行的,在数据库中应该不留痕迹吧,所以楼主的要求估计很难实现。自己胡乱猜测而已。嘿嘿
      

  4.   


    小TONY背后的桌子上难道是2005内幕。。