我设计了一种通用的台帐算法,这个算法保存在几个SQL2K函数中.但是这几个SQL2K函数在实际调用中,会调用不同的数据表,数据表中的字段名也可能会有些不同.这样的话,就会要使用动态的SQL语句.有没有一种方法,不写动态SQL语句,就可以在调用时指定不同的表呢?
我有一个想法,再建立这些函数对应的存储过程.存储过程调这些SQL2K函数时,先临时建立指定表的视图,然后再调用它们,而这几个SQL2K函数使用的是这些临时视图.能不能这样做?这就可以避免建动态SQL了.这样做,会不会影响效率??

解决方案 »

  1.   

    这样做,会不会影响效率??
    有一些影响, 失去了预编译能得到的好处, 大量数据的话, 得考虑临时表上建立索引.另外, 你必须考虑多用户同时调用带来的冲突, 因为用户定义函数中无法使用临时表, 所以你的方法中考虑了使用临时视图, 但sql 不支持临时视图, 所以你的临时视图实质上是存在的一个视图, 只是每次调用都要重新设置视图定义而已, 这样, 并发调用就难免有冲突了.
      

  2.   

    不推荐使用楼主的做法,改用动态SQL的时候还是要用的。如果你要对你的这个通用算法做一个小小的改动,那么你要同步到所有的函数中。这对于维护你这些函数很不方便。
      

  3.   

    想动态对某个表进行操作,不想建动态SQL
    不可能吧
      

  4.   

    那看来,还是要写动态SQL了.真不方便.因为这几个函数都动态操作几个表和几个字段,而其名称可能不一样.这样这几个函数的参数就长长的一串指明这些表名和字段名了............几个还是忍忍算了,如果复杂的一点,几十个函数,参数有这些东西是受不了.
      

  5.   

    嗯,有一种想法,如果这个动态操作的表,以表变量的方式传到SQL2K函数里,SQL2K函数再对这个表变量进行SELECT操作,可行吗?
      

  6.   

    SQL2000的用戶自定義函數裏是不能執行動態SQL
      

  7.   

    感觉SQL 2K的存储过程和函数对表的操作绑定很紧密,而且它们间的关系又松散,并不适合做一些通用的操作模块出来.就是不象前台一样好编程........
      

  8.   

    楼主升级到sql 2005的话, 这个问题应该就能解决了.