行集函数
行集函数
定义:
行集函数指的是返回对象的函数,其中对象可以用来替代另一条SQL语句中的表。所有行集函数具有不确定性。这意味着即使同一组输入值,也不会在每次调用这些函数时都返回加相同的结果。
SQL Sever中有6个先集函数:CONTAINSTABLE(),FREETEXTTABLE(),OPENQUERY(),OPENROWSET(),OPENDATASOURCE(),OPENXML();
1、CONTAINSTABLE
CONTAINSTABLE返回具有零行、一行或多行的表,CONTAINSTABLE可以像一个常规的表名称一样,在SELECT语句的FROM子句中引用。使用CONTATINSTABLE的查询钭批定对每一行返回一个适当排名值(RANK)和全文键(KEY)的包含类型的全文查询。
CONTAINSTABLE 语句返回一个包含两个列(KEY,RANK)的虚拟表,这两个列的名称总是为KEY与RANK.可以使用INNER JOIN...ON语句来扩充返回的结果集。
例子:
SELECT * FROM CONTAINSTABLE(testtable,coll1,'ISABOUT(A WEIGHT(.7), B WEIGHT(.2))')
AS C
INNER JOIN testtable ON testtable.ID = C.[KEY]
2、FREETEXTTABLE
FREETEXTTABLE语句也基于全文索引信息生成一个虚拟表。像常规表名称一样,FREETEXTTABLE也可以在SELECT语句的FROM子句进行引用。使用FREETEXTTABLE进行的查询可以freetext类型的全文查询,这些查询为每行返回一个关联等级值(RANK)和全文键(KEY)。此语句只能用于已启用了全文索引的表。可以将FREETEXTTABLE语句理解解为CONTAINSTABLE的黑箱版本。
语法:FREETEXTTABLE(table,{column_name|(column_list)|*},'freetest_string'[,LANGUAGE language_term][,top_n_by_rank])
例子:
SELECT C RANK FROM FREETEXTTABLE(testtable,C,'XXX')
3、OPENQUERY
OPENQUERY语句允许使用链接服务器上的任何查询(返回行集的SQL语句)返回一个虚拟表。OPENQUERY的语法:OPENQUERY(linked_server, 'query(sql语句)')
OPENQUERY语句是可以用来执行分布式查询的最简单工具。利用OPENQUERY 语句,可以连接来自不同数据源的多个表。这些数据源不必是SQL Server表,只要它们是能被表示为链接服务器的数据源,就能用于OPENQUERY语句。
例子:
SELECT A,B,C FROM OPENQUERY(SANDCASTLE,'SELECT A,B,C FORM testbase.testtable')
4、OPENROWSET
OPENROWSET语句可以在SQL Server 语句中使用来自不同服务器的数据。就OPENROWSET而言,需要提供直接通过OLE DB建立连接所要求的信息。语法:OPENROWSET(‘provider_name’,'datasource';'user_id';'password','query')
OPENROWSET语句在没有为特定数据源创建链接服务器时有用。
例子:SELECT A,B FORM OPENROWSET(SQLOLEDB,'SANDCASTLE';'sa';'SQLserver','select A,B FORM testbase.testtable')
5、OPENDATASOURCE
OPENDATASOURCE提供一种更灵活的连接方法,用于建立与OLE DB数据源的临时连接。
语法:OPENDATASOURCE (provider_name, connection_string)
例子:SELECT A,B,C,D FROM OPENDATASOURCE(SQLOLEDB,'DATA SOURCE = DANDCASTLE;USER ID = sa;Password = SQLserver').testbase.testtable
6、OPENXML
OPENXML语句可以将XML文件内的节点集作为类似于表或视图的行集数据源来对待。为些需要指定XML文档,提供用来选择节点的XPath表达式,并指定XML与最终行集之间的列映射。
OPENXML语句与两个存储过程协同工作:sq_xml_preparedocument和sp_xml_removedocument.其中第一个存储过程将表示为文本字符的XML转换为一个树,并将其保存在SQL Server的内存中,第二个存储过程表示在XML文档的这种解析版本完成使命时从SQL Server内存中删除它。