用动态sql语句生成游标需要执行exec命令,但是自定义函数中不支持exec命令,使用后则出错,这是什么原因?

解决方案 »

  1.   

    函数里面不能用exec。getdate(),以及update等等操作``
      

  2.   

    函数中的有效语句的类型包括: DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
    为函数局部对象的赋值,如使用 SET 为标量和表局部变量赋值。
    游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用 FETCH 语句将数据返回到客户端。仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
    除 TRY...CATCH 语句之外的控制流语句。
    SELECT 语句,该语句包含具有为函数的局部变量赋值的表达式的选择列表。
    INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部表变量。
    EXECUTE 语句,该语句调用扩展存储过程。
      

  3.   

    函数体内只有EXECUTE 语句调用扩展存储过程。
    游标支持
      

  4.   

    多谢各位老大的热心结实回答,看来只有使用扩展存储过程了,不晓得这个问题在sqlserver2005中解决了没有,我还没有做过扩展存储过程呢,:),难不难做啊?
      

  5.   

    扩展存储过程 好像用C++写DLL吧
      

  6.   

    首先用C语言做一个DLL文件,假设已经做好扩展存储过程的DLL文件为dbxp_skate.dll--首先要将dll文件(dbxp_skate.dll)拷贝到sql程序所在的binn目录,例如C:\Program Files\Microsoft SQL Server\MSSQL\Binn--安装扩展存储过程
    exec master..sp_addextendedproc 'xp_dbevent', 'dbxp_skate.dll'--调用扩展存储过程
    exec master..xp_dbevent 1,'a','b'--执行 sp_helpextendedproc 以显示当前由 SQL Server 装载的 DLL 文件。
    exec sp_helpextendedproc @funcname = 'xp_dbevent'  --察看xp_dbevent所属的DLL
    exec sp_helpextendedproc       --察看SQL Server 装载的 DLL 文件--卸载扩展存储过程
    exec master..sp_dropextendedproc 'xp_dbevent'--从内存中卸载指定的扩展存储过程动态链接库(dbxp_skate.dll)
    dbcc dbxp_skate(free) 天,这个太麻烦了,而且跟我的实现目的毫无用处,看来只能另找方法了,呜.......呜.......
      

  7.   

    这个问题在sqlserver2005中解决了没有没有