通过表格式数据流协议传输表值参数的制作方法

文档序号:6477440阅读:126来源:国知局

专利名称::通过表格式数据流协议传输表值参数的制作方法通过表格式数据流协议传输表值参数些旦冃豕计算机技术的进步(例如,微处理器速度、存储器容量、数据传送带宽、软件功能……)通常对增加计算机在各种产业中的应用作出贡献,使得计算机系统的组织已经发生了巨大的变化。让所有用户将其工作带到具有单个大型计算机的大型计算机中心的概念已经过时了。同样,自从数据库管理系统(DBMS系统)从集中式大型计算机环境移到非集中式或分布式环境中以来已经有很长时间了。例如,一个或多个PC"客户机"系统可以通过网络连接至一个或多个基于服务器的数据库系统(结构化查询语言——SQL数据库服务器)。已知的计算机网络的示例包括在其中各计算机在地理上靠近在一起(例如在同一建筑中)的局域网(LAN)和在其中各计算机距离较远并且通过电话线或无线电波连接的广域网(WAN)。通常,网络被配置成"客户机/服务器"网络,使得网络上的计算机分类成"客户机"或"服务器"。服务器是专用于管理诸如存储(例如盘驱动器)、打印机、调制解调器等共享资源的强大的计算机或进程。服务器通常是专用的,意指它们实际上除了执行其服务器任务之外不执行其它任务。例如,数据库服务器管理诸如处理来自各客户机的数据库査询的数据库信息。客户机-服务器体系结构的客户机部分通常包括PC或工作站,它们依赖于服务器来执行操作。通常,客户机运行依赖于服务器来执行诸如返回特定数据库信息等某些操作的"客户端应用程序"。通过这样的网络,各种请求-响应协议根据预定的规则集合来传输信息。一个这样的请求-响应协议是表格式数据流(TDS)协议,它是面向消息的应用层协议,用于在客户机与服务器系统之间传送请求和响应。TDS可包括对诸如字符(char)、可变长度字符(vchar)、二进制(blob)、日期-时间、时间戳、供应商专用数据类型等传统SQL数据类型的本机支持。在使用TDS的系统中,客户机(例如用户或应用程序)通常建立与服务器(例如数据库)的长期连接。在通过合适的所支持的传输/会话层协议成功握手并建立连接后,4完整的消息从客户机传送至服务器,之后完整的响应从服务器传播至客户机。概述下面提供本发明的简化概述以便提供对本发明的一些方面的基本理解。本概述不是本发明的详尽概观。它既不旨在标识本发明的关键或重要元素,也不旨在描绘本发明的范围。其唯一目的是以简化形式提出本发明的一些概念作为稍后提出的更详细描述的序言。本发明通过使客户机能够将表格形式的数据作为单个参数发送至服务器(例如在参数内部将各表格发送至SQL服务器)来增强表格式数据流(TDS)协议。这样的TDS协议可使用表值参数(TVP)传输组件,它允许客户机服务器例如在调用服务器侧过程时将整个数据库表作为单个参数来发送。如此,可向与存储过程相关联的函数传递值,并可实现参数型应用程序接口(API);其中服务器也可通过使用可封装整个数据表的TVP类型来向客户机发送输出参数或返回值。因此,与仅将单独值作为参数来发送相反;表形值集合可以作为单个参数从客户机发送至服务器。因此,客户机可将"N"列和"M"行形式的数据(其中M、N是整数)作为单个参数发送至服务器。同样,这样的单个参数在服务器侧可作为单个实体来处理。在一有关方面,TVP传输组件使用与作为单个参数发送到服务器的表格形式相关联的元数据。这可包括指定数据类型/串、行数、列数等的句法形式。根据本发明的一种方法,最初可在句法形式中,如设置标志来指示可空类型等,来指定与定义表相关联的元数据。随后,表格形式的数据形式可作为单个参数从客户机发送至服务器。接着,服务器可将单个参数作为单个实体来处理。随后可在服务器侧执行相关联的査询。为实现上述及相关目标,本发明因而包括在下文充分描述的各特征。下面的描述和附图详细阐明本发明的某些说明性方面。然而,这些方面仅表示使用本发明的原理的各种方法中的一小部分。本发明的其它方面、优点和新颖特征通过结合附图考虑本发明的下列详细描述将变得显而易见。附图简述图1示出根据本发明的一方面的示例性表格式数据流(TDS)协议,它能够将表形值集合作为单个参数从客户机发送至服务器。图2示出作为本发明的TDS协议一部分的表值参数(TVP)传输组件。图3示出根据本发明的一方面的用于三个参数的TVP格式的具体示例。图4示出根据本发明的一方面的将表格形式的数据作为单个参数发送至服务器的方法。图5示出通过本发明的TVP传输组件封装数据表的相关方法。图6示出作为允许客户机服务器将整个数据库表作为单个参数来发送的TVP传输组件的一部分的示例性缓冲区头部方案。图7示出根据本发明的一个特定方面的与TVP组件相关联的人工智能(AI)组件。图8示出根据本发明的另一方面的实现增强的TDS协议的示例性系统。图9示出用于实现本发明的各方面的示例性环境。图10是根据本发明的一方面可用于传送表格式数据的示例计算环境的示意框图。详细描述现在参考附图描述本发明的各方面,在所有附图中相同的标号指的是相同或相应的元素。然而应当理解,附图和与之有关的详细描述不旨在将所要求保护的主题限制于所公开的具体形式。相反,目的是要覆盖落入所要求保护的主题的精神与范围之内的所有修改、等效和替换方案。图1示出根据本发明的一方面的使用增强的表格式数据流(TDS)协议120的系统100的框图。这样的增强的TDS协议使客户机130能够将整个数据库表135以单个参数131的形式发送至服务器140,随后在那里可执行各语句并将结果发送回客户机130。系统100与数据存储系统110相关联,数据存储系统110可以是基于数据库结构的复杂模型,在其中定义项、子项、属性和关系以允许在数据存储系统内将信息表示为复杂类型的实例。例如,数据存储系统110可使用一组基本构件来创建和管理丰富、持久的对象以及对象之间的链接。可将项定义成数据存储系统110内最小的一致性单元,它可以独立地进行保护、串行化、同步、复制、备份/恢复等等。这样的项可包括类型的实例,其中数据存储系统iio中的所有项可以存储在单个全局的项范围中。此外,数据存储系统iio可基于至少一个项和/或容器结构,并且可用作展示作为项而隐藏在文件中的丰富元数据的存储平台。数据存储系统110可包括数据库(未示出)以支持上述功能,其中可实现任何合适的特性和/或属性。此外,数据存储系统110可使用容器分层结构,其中容器是可包含至少一个其它项的项。这样的包含概念可通过在相关联的类内的容器ID属性来实现,其中存储也可以是物理组织和可管理性单元的形式的容器。另外,存储表示分层结构内容器树的根容器。如图1所示,增强的TDS120允许将表形值集合作为单个参数从客户机130发送到服务器140——这与仅将单独的值作为参数来发送相反。因此,客户机130可将"N"列和"M"行(其中M、N是整数)形式的数据作为单个参数发送至服务器140。图2示出根据本发明的一方面的作为TDS协议222—部分的表值参数(TVP)传输组件220。例如,当调用服务器侧过程时,TVP传输组件220使客户机221能够发送整个数据库表作为单个参数,例如当调用服务器侧过程时,可向与存储过程相关联的函数传递值。通常,存储过程204、206、208(l至m,其中m是整数)是物理地存储在数据库内的程序(或过程)。这样的程序通常以专用数据库语言编写并且响应于用户请求由数据库211的引擎直接运行。存储过程204、206、208有权直接访问需要操纵的数据,并且通常仅需将结果发送回用户,因而减少了来回传递大量数据的开销。例如,存储过程204、206、208的典型用途包括集成到数据库结构中的数据确认(用于这一目的存储过程通常称为触发器)、或者封装一些大型或者复杂处理(诸如操纵大型数据集以产生概括结果)。存储过程204、206、208也可在从许多外部程序操纵数据库211时使用。TVP传输组件220允许实现参数型应用程序接口(API);其中服务器也可使用可封装整个数据表的TVP类型来向客户机发送输出参数或返回各个值。下面的讨论描述根据本发明的一方面的TVP传输组件220的一个具体方面。例如,考虑下面的表定义"createtableauthors(aidintprimarykey,anamevarchar(max))"客户随后可定义带有"tvp—authors(tvp作者)"表值参数的存储过程,从而允许调用者传入具有0...N(其中N是整数)行的表作为参数并且将下列内容插入到作者(author)表中createprocedureproc—insert_authors(@pltvp—authors)asinsertintoauthorsselect*from@pl对于相关的TVP格式,图3示出用于三个参数的传入集合的示图,其中"参数2"(304)作为TVP参数。如此,相关联的句法可以是下面的形式〃元数据语法〃TVPTYPEINFO:=TVPTYPE,TVP—TYPENAME,〃类型名称TVP—COLMETADATA,〃列专用元数据,〃可任选元数据令牌,〃可任选元数据令牌TVP一END一TOKEN,〃结束可任选元数据{TVP—ROW},〃0..N个TVP_ROW(TVP行)令牌TVPJEND—TOKEN〃行结束〃元数据语法成分〃TVPTYPE:=0xF3;〃TVP—TYPENAME(TVP类型名称)定义〃DbName:=B_VARCHAR;〃TVP类型所在的数据库OwningSchema:=B_VARCHAR;〃TVP类型所在的模式TypeName:=B—VARCHAR;〃TVP类型名称TVP—TYPENAME:=DbName,OwningSchema,TypeName例如,在这样的句法中,DbName(数据库名称)、OwningSchema(所属8模式)和TypeName(类型名称)可包括多至128个字符(128个WCHAR(宽位字符)是最大标识符长度)。应当理解,DbName也可以是零长度的,并且可以指定OwningSchema禾口TypeName。这样的DbName、OwningSchema禾口TypeName是可任选的字段并且可包含零长度串。调用者通常应当遵循下列要求,即如果TVP是其中参数元数据可在服务器侧获得的存储过程或函数的参数,则客户机可发送全部零长度串以用于TVP_TYPENAME;和/或如果TVP是自组织(adhoc)SQL语句的参数,则参数元数据信息通常不能在服务器上的存储过程或函数上获得,并且如果这样则客户机负责用TVP发送足够的类型信息以允许服务器例如从sys.types解析TVP类型。〃TVP_COLMETADATA(TVP列元数据)定义〃fNullable:=BIT;〃列可空陽0x01fCaseSen:=BIT;〃列大小写敏感-0x02usUpdateable:=BIT,BIT;〃2-位值,下列值之一〃0=只读-0x00〃1=读写-0x04〃2=未知-0x08fldentity:=BIT;〃列是标识列-0x10fComputed:=BIT;〃列是计算得到的-0x20usReservedODBC:=BIT,BIT;〃用于ODBC的保留位-0x40+80ffixedLenCLRType:=BIT;〃定长CLR类型-0x100fDefault:=BIT;〃列是默认值-0x200usReserved:=BIT,BIT,〃六个剩余的保留位。BIT,BIT,BIT,BIT;Flags:=fNullable,fCaseSen,usUpdateable,fldentity,fComputed,usReservedODBC,fFixedLenCLRType,fDefault,usReserved;Count:=USHORT;〃列计数最多至1024最大值ColName:=B—VARCHAR;〃列的名称UserType:=ULONG;〃列的用户类型TvpColumnMetaData:二UserType,Flags,〃歹ll元数据实例TYPEINFO,ColName;TVPNULLTOKEN:=OxFFFF;TVP_COLMETADATA:=TVP一NULLJTOKEN|Count,{TvpColumnMetaData};对于上面的示例性句法,通常可添加一个新的标志fDefault(默认标志),并且如果该fDefault标志被置位,则客户机驱动程序可在发送TVP_ROW时跳过发出列的数据值。而且,ColName(列名称)通常在TVP内是零长度的,并且可忽略用户UserType(用户类型),除非其中UserType=x—utypTimeStamp(0x50)且TYPEJNFOTDS类型是大二进制(BIGBINARY)。如果这样,则客户机指示该列是时间戳(TIMESTAMP)列,并且对于这样的特定时间戳情形,客户机可将该列标志为默认,以避免对TVP的拒绝。应当理解,TVP的TvpColumnMetaData(TVP列元数据)不像正常的列元数据(COLMETADATA)令牌那样,它不包括TEXT(文本)、NTEXT(国际文本)和IMAGE(图像)列的表格名(TableName)。此外,如果整个TVP参数是默认值则可使用TVP_NULL—TOKEN(TVP空令牌)令牌(例如,如果参数不是默认的,则使用TVP—NULL—TOKEN通常将被服务器拒绝)。在TVP中标志的使用通常对于输入TVP,如果在列上设置fDefault标志,则要求客户机在发送每个TVP—ROW时不发出相关联列的对应TvpColumnData(TVP列数据)数据。这提高了操作效率(例如,减少发送虚或空数据值),其中服务器在构建TVP表时在服务器侧插入缺少的值。同样,对于输入TVP,可忽略fCaseSen(大小写敏感标志)、usUpdateable(可更新标志)和fFixedLenCLRType(定长CLR类型)标志。而且,fCaseSen可从检验计算得到,并且服务器在内部忽略该值,因此客户机驱动程序不负担相关联的计算。另外,服务器在输入时忽略usUpdateable,并且服务器不使用fFixedLenCLRType标志。对于输出TVP,各标志反映由在结果集中的典型列元数据(ColMetaData)令牌所发送的值。<table>tableseeoriginaldocumentpage11</column></row><table>表1-TVP标志使用图表图4示出根据本发明的一方面的将表格形式的数据作为单个参数发送到服务器的相关方法400。尽管该示例性方法在本文示出并描述为表示各种事件和/或动作的一系列框,但本发明并不受所示出的这些框的排序的限制。例如,根据本发明,除了本文示出的次序之外,某些动作或事件可按不同的次序发生和/或与其它动作或事件同时发生。另外,不是所有示出的框、事件或动作都是实施根据本发明的方法所必需的。而且,将会理解,根据本发明的该示例性方法和其它方法可结合本文示出并描述的方法相关联地实现,也可与未示出或描述的其它系统和装置相关联地实现。在410处,例如通过在网络上发送登录数据流(例如发起握手),客户机发起与服务器的连接。这样的从客户机到服务器的通信可包含多个命令,并且来自服务器的响应可返回多个结果集。在420处,在所发起的这样的通信中,TDS提供会话、表示和应用服务元素。接着且在430处,服务器可确认客户机的连接请求。然后且在440处,可将表形值集合可作为单个参数从客户机发送至服务器_一与仅将单独值作为参数来发送相反。例如,客户机可将"N"列和"M"行(其中M、N是整数)形式的数据作为单个参数发送至服务器。图5示出通过本发明的TVP传输组件来封装数据表的相关方法500。最初且在510处,可定义与句法形式相关联的元数据,其包括指定数据类型/串的句法、行数、列数、设置标志以指示可空类型等,如上详细描述的。接着且在520处,本发明的TVP传输组件可以封装整个数据表。因此,在530处可将表形值集合作为单个参数从客户机发送至服务器一_与仅将单独值作为参数来发送相反——其中客户机可将"N"列和"M"行(其中M、N是整数)形式的数据作为单个参数发送至服务器。在540处,服务器随后可将这样的单个参数作为单个实体来处理。随后可在服务器侧执行相关联的查询,并且将结果发送回客户机。图6示出作为允许客户机服务器将整个数据库表作为单个参数来发送的TVP传输组件610—部分的示例性缓冲区头部方案600。从客户机到服务器的调用可发送一个或多个参数至服务器,其中预定的头部部分可定义参数的值类型、歹U、数据类型、行、二进制格式和相关联的缓冲区。通常缓冲区600是一次性写或读的单元,并且可以建模成"分组",其中消息可包括一个或多个缓冲区。缓冲区可包括缓冲区头部602,之后伴随着包含消息的缓冲区数据604。此外,每个新消息可从新的缓冲区开始。一般而言,客户机和服务器两者都尝试读充满数据的缓冲区,并且可挑出头部以观察在通信中还存在着多少数据。当底层网络接口坚持阻塞直至在读取时指定的所有字节均已经被读取为止时,客户机可读取头部并且随后确定还要阅读多少。例如,在登录时,客户机可指定所请求的"分组"大小,这可标识用于将大消息分解成较小"分组"的大小。此外,在客户机和服务器之间传递的用于传递整个表的消息一般可包括以下两种类型之一;"令牌流"或"无令牌流"。令牌流包括一个或多个"令牌",每个令牌之后伴随着某种令牌专用数据。"令牌"表示用于描述其后的数据的单字节标识符(例如,包含令牌数据类型、令牌数据长度等)。无令牌流通常用于简单消息,而将需要对其中的数据进行更详细描述的消息是作为令牌流来发送的。与TVP相关联的示例性令牌可包括下列12〃可任选TVP附加元数据令牌〃〃TVP—ORDERJJNIQUE(TVP次序和唯一性)定义〃1.ColNum(列编号)序数是l..N(N是整数),其中1是TVP一COLMETADATA中的第一列(换言之,序数始于l)。2.每个TVP一ORDERJJNIQUE令牌可描述排序的列集合和/或唯一性的列集合。3.被置位了排序位的第一列序数是主分类列,被置位了排序位的第二列序数是次分类列,以此类推。4.客户机可在单个TVP中发送0或1个TVP—ORDER—UNIQUE令牌。5.TVP_ORDER_UNIQUE令牌可在TVPCOLMETADATA之后并第一个TVP一ROW令牌之前发送。6.当将TVP发送至服务器时,在TVP_ORDER_UNIQUE令牌内的每个CoINum序数可以指客户机生成的列。指示置位了fldentity或fComputed(计算标志)或fDefault的列的序数可被服务器拒绝。TVPORDERUNIQUETOKEN:=0x10;Count:=USHORT;〃其后的CoINum的计数CoINum:=USHORT;〃单个列序数fOrderAsc:=BIT;〃列按升序排序-0x01fOrderDesc:=BIT;〃列按降序排序-0x02fUnigue:=BIT;〃列在唯一集合中-0x04Reservedl:=BIT,BIT,〃五个保留位BIT,BIT,BIT;OrderUnigueFlags:=fOrderAsc,fOrderDesc,fUnigue,Reservedl;TWORDERUNIQUE:=TVP—ORDER—UNIQUE—TOKEN,Count,{CoINum,OrderUnigueFlags};13<table>tableseeoriginaldocumentpage14</column></row><table>表2—OrderUniqueFlag(次序和唯一性标志)的可能组合和定义〃TVP—COLUMN—ORDERING(TW列排序)〃TVP_COLUMN—ORDERING使用1.TVP—COLUMN—ORDERING是可任选TVP元数据令牌,用于允许TDS客户机在TVP中发送与默认排序不同的列排序。2.ColNum序数是l..N,其中1是TVP中的第一列(换言之,序数始于1)。这些是与TDS次序令牌所使用的相同的序数,例如指示以从左至右顺序出现的列的列序数。3.客户机可在单个TVP中发送0或1个TVP—COLUMN_ORDERING令牌。4.TVPCOLUMN—ORDERING令牌可在TVP—COLMETADATA之后并在第一个TVP—ROW令牌之前发送。TVP_COLUMN—ORDERING—TOKEN:=0xll;Count:=USHORT;〃其后的ColNum的计数ColNum:=USHORT;//单个列序数TWCOLU画—ORDERING:=TVPCOLUMN—ORDERINGTOKEN,Count,{ColNum}^TVPCOLU画一ORDE腿GTVP一COLUMNJDRDERING通常用于在TVP中重新排序各列。例如如果TVP被定义为createtypemyTvpastable(f1int,f2varchar(max),f3datetime)则TDS客户机可在TVP内最后发送G字段作为优化(最后流传输较大的值)。因此,客户机可按次序l、3、2发送TVP—COLUMN—ORDERING以指示在TVP—ROW部分内,首先发送列fl,其次发送f3,并且第三发送f2。因此,上例的线路上的TVP—COLUMN—ORDERING令牌可包括11〃TVPCOLUMN—ORDERING_TOKEN(TVP列排序令牌)0300〃计数--其后的ColNum的数量。0100〃ColNum--在TVP—ROW中首先发送TVP列序数1。0300〃ColNum-在TVP—ROW中其次发送TVP列序数3。0200〃ColNum-在TVP_ROW中第三发送TVP列序数2。重复的ColNum值可被认为是出错情况。在实际的TVP类型中列的序数值是从第一列的1开始并且对于从左至右的每一列加1来排序的。要求客户机对TVP_COLMETADATA中的每个列发送一个ColNum(因此计数(Count)通常应当匹配TVP_COLMETADATA中的列数)。〃TVP—ROW定义〃TVP—ROW使用注意1.每行按TVP一COLMETADATA中指定的列而包含一个数据"单元"。在输入时,在TVP一COLMETADATA中置位了fldentity或fDefault或^Computed标志的列将被跳过以避免发送冗余数据。2.列数据以与TVP—COLMETADATA中定义的项次序相同的次序来排序,除非提供了TVP一COLUMlSLORDERING令牌。TVP_ROW—TOKEN:=0x01;〃其后是TVPCOLMETADATA所定义的行TvpColumnData:=TYPEVARBYTE;AllColumnData:={TvpColumnData};〃数据块,TVP_COLMETADATA中定义的每个非默认列有一个数据块。TVP—ROW:=TVP_ROW_TOKEN,AllColumnData;〃TVP_END—TOKEN(TVP结束令牌)定义〃TVP_END_TOKEN:=0x00;〃TVP类型的结束符标记,意味着其后不再有TVP一ROW以及单个TVP的成功传输的结束。下面的讨论提供根据本发明的一方面的与具体TVP相关联的示例。示例l涉及具有3列(int(整数),varchar(可变长度字符),datetime(日期时间))和4行的示例TVP。按列序数1升序和列序数2降序以及fl上的唯一索引来排序。因此,输入TVP数据可与由下列sql脚本返回的结果集极其相似createtabletl(flint,f2varchar(5),Gdatetime)gocreateuniqueindexidxlontl(fl)goinserttlvalues(null,null,null)inserttlvalues(1,'AAAAA',getdate())inserttlvalues(2,'BBBBB',getdate(》inserttlvalues(2,'CCCCC',getdate(》goselect*fromtlorderby1,2goTVP->03I410041004100〃参数元数据(ParameterMetaData)(参数名称是AAA)。00〃状态标志(StatusFlag)(0意指输入参数)。F3〃TVP类型(TVP_TYPE)(这是TVP_TYPE_INFO(TVP类型信息)的起始)。03I410041004100〃DbName——TVP所在的数据库03I420042004200〃OwningSchema——TVP的模式03I430043004300〃TypeName——TVP类型名称0300〃计数——其后的列的计数。00000000〃UserType0100〃标志(fNullable)2604〃整数(INTN)(4字节长度)00〃ColName(0指示没有发送名称)00000000//UserType0100〃标志(麵lable)A7OA000904DO0034〃大可变长度字符(BIGVARCHAR)(最大长度10+检验0x409等)00〃ColName00000000〃UserType0100〃标志(fNullable)6F08〃DATETIMN(日期时间)(长度8)00〃ColName10〃TVP_ORDER_UNIQUE_TOKEN0200//计数(其后有2列)010005(0x01+0x04)〃列序数1(第一列升序且唯一)020002//列序数2(第二列降序)00〃TVP_END—TOKEN(可任选元数据的结束)01〃TVP—ROW—TOKEN(TVP行令牌)00〃空整数值FFFF//空大可变长度字符值00〃空DATETIMN值01〃TVP—ROW—TOKEN04I01000000//整数值(l)0500I4141414141//大可变长度字符值('AAAAA')08I90970000DF22DF00〃DATETIMN值(某个日期)01〃TVP一ROW—TOKEN04I02000000//整数值(2)0500I4343434343//大可变长度字符值('CCCCC')08I90970000DF22DF00〃DATETIMN值(某个日期)01〃TVPROW—TOKEN04I02000000//整数值(2)0500I4242424242〃大可变长度字符值('BBBBB')08i90970000DF22DF00〃DATETIMN值(某个日期)00〃TVP—END_TOKEN(行结束)//下一个参数元数据开始或者所有参数结束。示例2:默认TVP示例在该示例中,表示了默认TVP,这是在客户机希望向服务器指示整个TVP参数值是默认的时候。TW->03I410041004100〃参数元数据(参数名是AAA)。02〃状态标志(2意指默认值标志(fDefaultValue))。F3〃TVP类型(这是TVP_TYPE_INFO的开始)00〃DbName——数据库(这里发送空)00〃OwningSchema——模式(这里发送空)00〃TypeName——TVP类型名称(这里发送空)FFFF〃OxFFFF->TVP—NULL—TOKEN00〃TVP_END_TOKEN(可选元数据的结束)00〃TVP—END—TOKEN(行结束)〃下一个参数元数据开始或者所有参数结束。示例3:具有默认列的输入TVP该示例涉及客户机何时指定将整个列作为默认值发送到服务器。服务器可具有在TVP列上定义的默认值,并且还可在服务器侧用预定的默认值来填充值。一般而言,客户机将不发送任何虚空值(而作为默认值来发送的正常单个参数发送虚空值)。例如,这样的特征对于TVP参数超载或对于用服务器计算得到的值(类似于getdate()或newid())来填充TVP列是有用的。因此,创建以下并用默认值插入createtablet2(flvarchar(5),f2datetimedefaultgetdate())goinsertt2values(null,default)insertt2values('AAAAA',default)goTVP-〉03I410041004100〃参数元数据(参数名是AAA)。00〃状态标志(O意指输入参数并且不对整个TVP使用默认值)。F3〃TVP类型(这是TVP—TYPE_INFO的起始)。00〃DbName——数据库(这里未设置)。00〃OwningSchema-模式00〃TypeName—TVP类型名称0200〃计数——其后的列的计数。00000000//UserType0100〃标志(麵lable)A7OA000904DO0034//大可变长度字符(最大长度10+检验0x409等)00〃ColName00000000〃UserType0102〃标志(fNullable1fDefault)6F08〃DATETIMN(长度8)00〃ColName00〃TVP_END—TOKEN(可任选元数据的结束)01〃TVP—ROW—TOKENFFFF//空大可变长度字符值〃注意不发送DATEIMN值01〃TVPROWTOKEN0500I4141414141//大可变长度字符值('AAAAA')〃注意不发送DATEIMN值00〃TVP_END_TOKEN(行结束)//下一个参数元数据开始或者所有参数结束。图7示出根据本发明的一方面的可用于促进推断和/或确定何时、何地、如何通过利用单个参数来发送表格式数据的人工智能(AI)组件730。如本文所使用的,术语"推断"一般指根据通过事件和/或数据捕捉的一组观察结果来推理或推断系统、环境和/或用户的状态的过程。例如,推断可用于标识特定的上下文或动作,或者可生成状态的概率分布。推断可以是概率性的——即,基于对数据和事件的考虑来计算感兴趣的状态的概率分布。推断还可以指用于从一组事件和/或数据来组成较高级事件的技术。这样的推断导致从一组观察到的事件和/或存储的事件数据中构造新事件或动作,而无论这些事件是否在相邻时间上相关,也无论这些事件和数据是来自一个还是来自若干个事件和数据源。AI组件730可如上所述地结合促进本文描述的发明的各方面来使用各种合适的基于AI的方案中的任何一种。例如,用于显式或隐式地学习为发送整个表而要如何创建参数的过程可通过自动分类系统和过程来促进。分类可使用基于概率和/或基于统计的分析(例如分解成分析效用和成本)来预测或推断用户希望自动执行的动作。例如,可使用支持向量机(SVM)分类器。可使用其它分类方法,包括贝叶斯网络、决策树和提供不同独立性模式的概率分类模型。本文使用的分类也包含用于开发优先级模型的统计回归。如将从本说明书容易理解的,本发明可使用显式训练(例如通过一般训练数据)以及隐式训练(例如通过观察用户行为、接收外来信息)的分类器,使得分类器可用于根据预定准则来自动确定要向问题返回哪个答案。例如,对于已熟知的SVM,通过分类器构造器和特征选择模块内的学习或训练阶段来配置SVM。分类器是将输入属性向量x=(xl,x2,x3,x4,xn)映射到该输入属于某个类的置信度的函数^^Pf(x)=置信度(类)。图8示出实现使客户机820能够将表格形式的数据作为单个参数发送至服务器850的增强的TDS协议833的系统,其中在客户机820上运行是客户机进程,例如web浏览器810。同样,在服务器850上运行的是对应的服务器进程,例如web服务器860。另夕卜,嵌入在网络浏览器810中的可以是脚本或应用程序830,并且在客户机计算机820的运行时环境840中所运行的可存在用于对根据本发明各方面来格式化的数据分组进行打包和解包的代理815。与服务器850通信的是数据库管理系统(DBMS)880,它管理对数据库(未示出)的访问。DBMS880和数据库(未示出)可位于服务器本身之中,或者可远程地位于远程数据库服务器(未示出)。运行在web服务器860上的是数据库接口应用程序编程接口(API)870,它提供对DBMS880的访问。客户机计算机820和服务器计算机850可通过网络890相互通信。当客户机进程例如web浏览器810从数据库请求数据时,脚本或应用程序830发出査询,该査询跨网络(例如因特网)890发送至服务器计算机850,在那里它由服务器进程例如web服务器860来解释。如前所述,客户机820对服务器850的请求可包含多个命令,并且来自服务器850的响应可返回多个结果集。在这样的通信中,TDS提供会话、表示、应用服务元素。由于TDS—般不要求任何特定的传输提供者,因此它可通过多个传输协议和网络890来实现。这样的TDS协议可使用表值参数(TVP)传输组件895,该组件允许客户机820将整个数据库表作为单个参数来发送——例如,当调用服务器侧过程时。所返回的对客户机命令的响应可以是自描述的和面向记录的;(例如,数据流可描述所返回的行的名称、类型和可任选描述)。在客户机侧820,数据可以是登录记录、或者以服务器侧850可接受的语言编写的结构化査询语言(SQL)命令、其后伴有相关联的二进制数据(例如,用于成批复制命令的数据)的SQL命令、或引起注意信号。当需要连接时,客户机820可发送登录数据流至服务器。虽然客户机820可具有多于一个至服务器450的连接,但每个连接路径可分开地且以相同方式来建立。一旦服务器850接收到来自客户机820的登录记录,则它将通知客户机它接受或拒绝该连接请求。同样发送SQL命令或SQL批命令;随后SQL命令(例如由统一字符编码格式表示)可被复制到缓冲区的数据部分中且随后发送至SQL服务器侧820。SQL批命令可跨多于一个缓冲区。另夕卜,各种开放的数据库连接(ODBC)例程可使SQL命令被置于客户机消息缓冲区中,或者可使消息缓冲区被发送至服务器。21另夕卜,对于带有二进制数据的SQL命令,成批插入(insertbulk)操作可表示其后伴有二进制数据的SQL命令(例如以统一字符编码格式)的情形。最初,可用正常方式将成批插入命令发送至服务器850,并且一旦从服务器850接收到确认,则客户机820随后可发送格式化的二进制数据至服务器850。根据本发明的一个示例性方面,这样的功能可由包含在ODBC中的例程来提供。而且,客户机820可向服务器850最初发送成批插入SQL语句、之后发送描述原始数据的COLMETADATA令牌、再后发送多行二进制数据。例如,数据没有用存储引擎行格式来格式化而是用COLMETADATA令牌所描述的格式来格式化。该流与从服务器850中选择数据而非将数据发送到服务器850的情况是一样的。此外,TVP令牌流可被命名为TVP—ROW,它可由从客户机到服务器或者从服务器到客户机的TVP_COLMETADATA来定义。这可包括令牌值0x01/1,具有下面的令牌流专用规则TokenType:=BYTE;TvpColumnData:=TYPEVARBYTE;AllColumnData:={TvpColumnData};TVPROW:=TokenType,AllColumnData;[词语"示例性"在本文中用于指用作示例、实例或说明。在本文描述为"示例性"的任何方面或设计不必解释为相对于其它方面或设计更优选或有利。同样,本文提供的示例仅出于清楚和理解的目的并且并不旨在以任何方式限制本发明或其部分。应当理解,可提出多个其它或替换示例,但为了简明已经被省略了。如在本申请中使用的,术语"组件"、"系统"、"引擎"旨在表示计算机相关实体,其可以是硬件、软硬件组合、软件或者执行中的软件。例如,组件可以是但不限于在处理器上运行的进程、处理器、对象、可执行代码、执行的线程、程序、和/或计算机。作为说明,运行在服务器上的应用程序和服务器都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程内,且组件可以位于一台计算机上/或分布在两台或更多的计算机之间。此外,本发明的全部或部分可使用产生控制计算机来实现所公开的发明的软件、固件、硬件、或其任何组合的标准编程和/或工程技术而被实现为系统、方法、装置、或制品。例如,计算机可读介质可包括但不限于磁存储介质(例如,硬盘、软盘、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、智能卡、和闪存设备(例如卡、棒、钥匙驱动器……)。另外应当理解,载波可用于携带计算机可读电子数据,诸如在发送和接收电子邮件时或者在访问诸如因特网或局域网(LAN)等网络时所使用的那些数据。当然,本领域技术人员将认识到可对该配置作出许多修改而不背离所要求保护的主题的范围或精神。为了提供所公开主题的各方面的上下文,图9和10以及下面的讨论旨在提供在其中可实现所公开的主题的各方面的合适环境的简要概括的描述。尽管在上面已经在运行于一个和/或多个计算机上的计算机程序的计算机可执行指令的一般上下文中描述了本主题,但本领域技术人员将认识到,本发明还可结合其它程序模块来实现。一般而言,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等等。而且,本领域技术人员将会理解,本发明的方法可与其它计算机系统配置一起实践,包括单处理器或多处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费电子产品或工业电子产品等等。所示各方面还可在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。然而,本发明的某些方面(如果不是全部)可在独立的计算机上实践。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。参考图9,描述用于实现本发明的各方面的示例性环境910,它包括计算机912。计算机912包括处理单元914、系统存储器916和系统总线918。系统总线918将包括但不限于系统存储器916在内的系统组件耦合至处理单元914。处理单元914可以是各种可用处理器中的任何一个。双微处理器和其它多处理器体系结构还可用作处理单元914。系统总线918可以是包括若干类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线或外部总线、和/或使用各种可用总线体系结构的任一种的局部总线,可用总线体系结构包括但不限于11-位总线、工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展ISA(EISA)、智能驱动电子学(IDE)、VESA局部总线(VLB)、外围部件互连(PCI)、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储器卡国际协会总线(PCMCIA)和小型计算机系统接口(SCSI)。系统存储器916包括易失性存储器920和非易失性存储器922。基本输入/输出系统(BIOS)存储在非易失性存储器922中,它包含诸如在启动时在计算机912内的元件之间传送信息的基本例程。作为说明而非限制,非易失性存储器922可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦ROM(EEPROM)或闪存。易失性存储器920包括用作外部高速缓存存储器的随机存取存储器(RAM)。作为说明而非限制,RAM有许多可用的形式,诸如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)和直接存储器总线RAM(DRRAM)。计算机912还包括可移动/不可移动、易失性/非易失性计算机存储介质。图9示出盘存储924,其中这样的盘存储924包括但不限于如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-60驱动器、闪存卡或存储器棒等设备。另外,盘存储924可包括与其它存储介质分开或与其它存储介质相结合的存储介质,包括但不限于诸如紧致盘ROM设备(CD-ROM)、可刻录CD驱动器(CD-R驱动器)、可重写CD驱动器(CD-RW驱动器)或数字多功能盘ROM驱动器(DVD-ROM)等光盘驱动器。为便于将盘存储设备924连接到系统总线918,通常使用可移动或不可移动接口,诸如接口926。应当理解,图9描述了在用户与在合适的操作环境910中描述的基本计算机资源之间担当中介的软件。这样的软件包括操作系统928。操作系统928可存储在盘存储924上,其用于控制和分配计算机系统912的资源。系统应用程序930通过存储在系统存储器916中或存储在盘存储924上的程序模块932和程序数据934来利用操作系统928对资源的管理。应当理解,本文描述的各种组件可与各种操作系统或操作系统的组合一起实现。用户通过输入设备936将命令或信息输入到计算机912中。输入设备936包括但不限于定点设备诸如鼠标、跟踪球、指示笔、触摸板、键盘、话筒、操纵杆、游戏键盘、卫星天线、扫描仪、TV调谐器卡、数字照相机、数字摄像机、web照相机等等。这些和其它输入设备通过系统总线918经由接口端口938连接至处理单元914。接口端口938包括例如串行端口、并行端口、游戏端口、和通用串行总线(USB)。输出设备940使用与输入设备936相同类型的端口中的一些端口。因而例如,USB端口可用于向计算机912提供输入,并且可用于从计算机912向输出设备940输出信息。提供输出适配器942以说明一些输出设备940需要专用适配器,如监示器、扬声器和打印机、以及其它输出设备940。作为说明且非限制,输出适配器942包括用于提供输出设备940与系统总线918之间的连接手段的视频卡和声卡。应当注意,其它设备和/或设备系统提供输入和输出能力,诸如远程计算机944。计算机912可使用到诸如远程计算机944等一个或多个远程计算机的逻辑连接在网络化环境中操作。远程计算机944可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的设备、对等设备或其它常见网络节点等等,并且一般包括相对于计算机912所述的许多或全部元件。为了简明,对远程计算机944仅示出了存储器存储设备946。远程计算机944通过网络接口948逻辑上连接至计算机912并且随后经由通信连接950在物理上连接。网络接口948涵盖通信网络,诸如局域网(LAN)和广域网(WAN)。LAN技术包括光纤分布式数据接口(FDDI)、铜分布式数据接口(CDDI)、以太网/IEEE802.3、令牌环/IEEE802.5等等。WAN技术包括但不限于点到点链路、诸如综合业务数字网(ISDN)及其各种变体等电路交换网络、分组交换网络、和数字用户线(DSL)。通信连接950指用于将网络接口948连接至总线918的硬件/软件。尽管为了说明清楚,通信连接950被示为在计算机912内部,但它也可在计算机912外部。仅出于示例性目的,连接至网络接口948所需的硬件/软件包括内部和外部技术,诸如包括常规电话级调制解调器、电缆调制解调器和DSL调制解调器的调制解调器,ISDN适配器,以及以太网卡。图10是可用于实现本发明的增强的TDS的示例计算环境1000的示意框图。系统1000包括一个或多个客户机1010。客户机1010可以是硬件和/或软件(例如,线程、进程、计算设备)。系统1000还包括一个或多个服务器1030。服务器1030也可以是硬件和/或软件(例如,线程、进程、计算设备)。例如,服务器1030可容纳各线程以通过例如利用本文所述的各组件执行变换。客户机1010和服务器1030之间的一种可能的通信可以是适于在两个或多个计算机进程之间传输的数据分组的形式。系统IOOO包括可用于促进客户机1010与服务器1030之间的通信的通信框架1050。客户机IOIO在操作上连接至可用于存储对客户机1010本地的信息的一个或多个客户机数据存储1016。同样地,服务器1030在操作上连接到可以用于存储对服务器1030本地的信息的一个或多个服务器数据存储1040。上面所述内容包括各示例性方面。当然,出于描述这些方面的目的而描述每一种可能想到的组件和方法的组合是不可能的,但本领域技术人员可认识到,许多其它组合和置换是有可能的。因此,本文所述的各方面旨在包括落入所附权利要求书的精神和范围之内的所有这样的变更、修改和变化方案。此外,就在详细描述或权利要求书中使用的术语"包括"而言,该术语旨在以与在权利要求中将"包含"用作过渡词语时所解释的那样相似的方式而为包含性的。权利要求1.一种计算机实现的系统,包括下列计算机可执行组件在客户机与服务器之间传送请求-响应的表格式数据流(TDS)协议;作为所述TDS一部分的表值参数(TVP)传输组件,所述TVP组件将表格形式的数据作为单个参数从所述客户机发送至所述服务器。2.如权利要求1所述的计算机实现的系统,其特征在于,所述TDS协议还包括定义所述表格形式的数据的值参数。3.如权利要求2所述的计算机实现的系统,其特征在于,所述TDS协议还包括被建模成分组的、用于传送所述表格形式的数据的缓冲区。4.如权利要求2所述的计算机实现的系统,其特征在于,还包括可由所述服务器调用来传送所述表格形式的数据的存储过程。5.如权利要求4所述的计算机实现的系统,其特征在于,还包括向与所述存储过程相关联的函数传递值的参数型应用程序接口(API)。6.如权利要求4所述的计算机实现的系统,其特征在于,还包括与关系数据库相关联的数据库管理系统。7.如权利要求4所述的计算机实现的系统,其特征在于,所述客户机还包括web浏览器。8.如权利要求7所述的计算机实现的系统,其特征在于,所述表格形式的数据表示整个表。9.如权利要求7所述的计算机实现的系统,其特征在于,还包括开放数据库连接(ODBC)例程以将SQL命令置于所述客户机的消息缓冲区中。10.如权利要求7所述的计算机实现的系统,其特征在于,所述SQL命令是统一字符编码格式的。11.一种计算机实现的方法,包括下列计算机可执行动作通过TDS协议将数据从客户机传送至服务器;以及将表格形式的数据作为单个参数从所述客户机发送至所述服务器。12.如权利要求11所述的计算机实现的方法,其特征在于,还包括封装整个数据表。13.如权利要求11所述的计算机实现的方法,其特征在于,还包括设置标志以指示可空类型。14.如权利要求11所述的计算机实现的方法,其特征在于,还包括通过头部部分来定义行或列或数据类型或它们的组合。15.如权利要求11所述的计算机实现的方法,其特征在于,还包括使用单字节标识符形式的令牌。16.如权利要求15所述的计算机实现的方法,其特征在于,还包括描述列的排序。17.如权利要求16所述的计算机实现的方法,其特征在于,还包括将所述单个参数作为单个实体来处理。18.如权利要求11所述的计算机实现的方法,其特征在于,还包括通过分类器来推断所述单个参数的生成。19.如权利要求11所述的计算机实现的方法,其特征在于,还包括在所述单个参数内将表发送至SQL服务器。20.—种计算机实现的系统,包括用于在客户机与服务器之间交换数据的装置;以及所述服务器用于接收单个参数形式的表的装置。全文摘要通过使客户机能够将表格形式的数据作为单个参数发送至服务器来增强表格式数据流(TDS)协议的系统和方法。表值参数(TVP)传输组件使客户机服务器能够将整个数据库表作为单个参数来发送;例如,在调用服务器侧过程时。如此,可向与存储过程相关联的函数传递值,并且可实现参数型应用程序接口(API)。文档编号G06F17/00GK101681354SQ200880018402公开日2010年3月24日申请日期2008年5月30日优先权日2007年6月1日发明者A·阿切森,I-S·李,M·A·内林克斯,V·L·华盛顿申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1