使用EXEC AT在远程SQL Server上执行动态SQL 由Linux系统中文网(Linux521.com)编辑收集整理,除Linux521注明原创文章外,其版权归原作者所有。如果您在学习中遇到问题欢迎在下面的评论中留言,我们会尽全力解答您的问题。
在这个技巧中,我将简短地介绍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上创建一张表。内容来源:www.linux 521.com Linux系统中文网
《Linux系统中文网》欢迎原创作者投稿,请先注册成为会员,然后在后台 相应的栏目里提交你的文章,注意填写好相关信息点“保存”。我们将在24小时之内审核完毕。
