Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199744
  • 博文数量: 163
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-08 11:41
文章分类

全部博文(163)

文章存档

2011年(1)

2009年(162)

我的朋友

分类: 数据库开发技术

2009-06-11 15:30:49

 在这个技巧中,我将简短地介绍OPENQUERY和OPENROWSET表函数、它们的局限以及新的EXEC AT命令如何解决这些局限。

  专家解答

  OPENQUERY表函数在指定的链接服务器上执行指定的传递查询。这个服务器是一个OLE DB数据源。OPENQUERY可以在一个查询的FROM从句中引用,就好像它是一个表名。OPENQUERY也可以在一个INSERT、UPDATE或 者DELETE语句的目标表中引用。虽然这个查询会返回多个结果集,OPENQUERY只返回第一个结果集。

  使用OPENQUERY的问题在于:首先,它不接受本身变量的变量,换句话说,它必须是静态的(虽然这里有一个解决它的技巧),其次,只有一个 结果集返回,第三,OPENQUERY只在FROM从句中使用,当你需要调用一个可执行语句时,例如针对目标服务器的DDL语句,这就变得非常限制。类似 的限制也适用于OPENROWSET表函数。

  SQL server 2005引入了一个改进 – EXEC命令允许你在链接服务器上执行动态SQL。新的EXEC AT命令解决了OPENQUERY和OPENROWSET上述的限制。EXEC AT指定command_string针对linked_server_name执行,如果有结果的话,那么结果返回给用户。 linked_server_name必须参照本地服务器上的现有链接服务器。

  例子

  那么现在让我们看看怎么使用这个新的命令。在下面给定的表中,

  脚本1创建了FARAWAYSERVER服务器的链接服务器定义。

  脚本2在一个返回单个结果集的链接服务器上执行一个简单的SELECT语句。

  脚本3在链接服务器上执行两个SELECT语句,因此两个结果集返回给用户。

  脚本4在链接服务器上执行一个SELECT语句并且在运行时间内动态传递两个变量。

  脚本5使用脚本4,但是这次它使用变量在运行时间内动态传递变量值。

  脚本6在链接服务器上执行可执行的代码,在这个例子中,它在链接服务器的tempdb上创建一张表。

  脚本7删除这个会话中创建的所有对象。

  脚本: EXEC AT 命令

  --脚本 1 : 创建一个链接服务器

  EXEC sp_addlinkedserver 'FARAWAYSERVER', 'SQL Server'

  --脚本 2 : 在链接服务器上执行一个简单的SELECT语句

  

      EXEC ('SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer') AT [FARAWAYSERVER];

  GO

阅读(1637) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~