zoukankan      html  css  js  c++  java
  • SQLSERVER中的MARS结果集是什么东东

    MARS:多个活动结果集

    MSDN上的解释:

    SQL Server 2005 在访问数据库引擎的应用程序中引入了对多个活动结果集 (MARS) 的支持。在 SQL Server 的早期版本中,数据库应用程序无法在单个连接上保持多个活动语句。使用 SQL Server 默认结果集时,应用程序必须先处理或取消自某一批处理生成的所有结果集,然后才能执行该连接上的其他任何批处理。SQL Server 2005 引入了新连接属性,支持应用程序在每个连接上拥有多个待定请求,特别是支持每个连接具有多个活动的默认结果集。

    MARS 通过以下新功能简化了应用程序设计:

    • 应用程序可以同时打开多个默认结果集,并且交错读取它们。

    • 应用程序可以在默认结果集打开的同时执行其他语句(例如 INSERT、UPDATE、DELETE 和存储过程调用)。

    下列指南对使用 MARS 的应用程序很有帮助:

    • 默认结果集应该用于使用单个 SQL 语句(SELECT、带 OUTPUT 的 DML、RECEIVE、READ TEXT 等)生成的短期或较小结果集。

    • 服务器游标应该用于使用单个 SQL 语句生成的长期或较大结果集。

    • 对于过程请求(不论它们是否返回结果)以及返回多个结果的批处理,应始终读取到它们的结果的末尾。

    • 尽可能使用 API 调用(而不是 Transact-SQL 语句)更改连接属性和管理事务。

    • 在 MARS 中,有多个批处理并发运行时禁止会话范围内的模拟。

    在SQL2000的时候,一个连接同时只能运行一个批处理指令。也就是说一个连接在一个时间点只能有一个请求在运行。

    但是SQL2005以后,如果使用了MARS技术,一个连接可以同时开启多个结果集。而sys.sysprocesses视图不能
    正确显示这种行为。

    MARS的执行方式:

    MARS 是从交错执行而不是从并行执行的角度定义的

    如何在不同的数据访问接口里使用MARS技术

    如果使用SQL Server Native Client OLE DB 访问接口 ADO跟ADO.NET就是使用这个接口

    那么 连接字符串可以是这样:

    1 string connstr = "Server=(local);Database=AdventureWorks;User ID=sa;Password=test;MarsConn=true";

    如果使用SQL Server Native Client ODBC 驱动程序 的话

    那么连接字符串可以是这样:

    1 SQLSetConnectAttr(hdbc, SQL_COPT_SS_MARS_ENABLED, SQL_MARS_ENABLED_YES, SQL_IS_UINTEGER);
    2 SQLDriverConnect(hdbc, hwnd,"DRIVER=SQL Server Native Client 10.0;SERVER=(local);trusted_connection=yes;", SQL_NTS, szOutConn, MAX_CONN_OUT, &cbOutConn, SQL_DRIVER_COMPLETE);
  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/lyhabc/p/2810268.html
Copyright © 2011-2022 走看看