您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_procxmode

语法

sp_procxmode [<procname >[,< tranmode>]]

参数

<procname>

是存储过程的名称,您要检查或更改的就是该存储过程的事务模式。

<tranmode>

是存储过程的执行模式。其值包括:

  • chained

  • unchained

  • anymode

  • Dynamic Ownership Chain

  • No Dynamic Ownership Chain

    示例

    示例 1

    显示当前数据库中所有存储过程的事务模式:

    sp_procxmode
    procedure name      user name   transaction mode
    ------------------  ---------   ----------------
    byroyalty           dbo         Unchained
    discount_proc       dbo         Unchained
    history_proc        dbo         Unchained
    insert_sales_proc   dbo         Unchained
    insert_detail_proc  dbo         Unchained
    storeid_proc        dbo         Unchained
    storename_proc      dbo         Unchained
    title_proc          dbo         Unchained
    titleid_proc        dbo         Unchained

    示例 2

    显示存储过程 byroyalty 的事务模式:

    sp_procxmode byroyalty
    procedure name   transaction mode 
    --------------   ---------------- 
    byroyalty        Unchained

    示例 3

    将 pubs2 数据库中存储过程 byroyalty 的事务模式从 unchained 更改为 chained:

    sp_procxmode byroyalty, "chained"

    用法

    使用 sp_procxmode 时,还存在一些其它注意事项:

  • 要更改某一存储过程的事务模式,您必须是该存储过程的所有者、包含该存储过程的数据库的所有者或系统管理员。数据库所有者或系统管理员可以通过用数据库和用户名限定其他用户的存储过程的模式,对该模式进行更改。例如:

    sp_procxmode "otherdb.otheruser.newproc", "chained"

  • 要使用 sp_procxmode,请使用 set 命令的 chained 选项禁用 chained 事务模式。缺省情况下,该选项被禁用。

  • 在使用不含参数的 sp_procxmode 时,它报告当前数据库中每一存储过程的事务模式。

  • 若要检查存储过程的事务模式(并不更改它),请输入:

    sp_procxmode <procname>

  • 若要更改存储过程的事务模式,请输入:

    sp_procxmode <procname>, <tranmode>

  • 在创建存储过程时,SAP ASE 服务器用当前会话的事务模式标记它。这意味着:

    - 您只能在使用 chained 事务模式的会话中执行链式存储过程。

    - 您只能在使用 unchained 事务模式的会话中执行非链式存储过程。

    要在链式或非链式会话中执行特定存储过程,请将其事务模式设置为 anymode。

  • 如果您尝试在错误的事务模式下运行某一存储过程,则 SAP ASE 服务器将返回一个警告消息,但当前事务(如果有)不会受到影响。

  • 执行 sp_procxmode procname, 'Dynamic Ownership Chain' 可确保存储过程中的任何 Dynamic SQL (execute immediate) 语句的权限都与过程创建者进行了核对。

  • 执行 sp_procxmode procname, 'No Dynamic Ownership Chain'(省略时的缺省行为)可确保存储过程中的任何 Dynamic SQL (execute immediate) 语句的权限都与过程执行者进行了核对。