如何让远程数据库中的1张表导入到本地数据库中,数据库都是SQL SERVER 2000

 

在本地数据库执行如下的语句:
insert into Info
select *
from OPENDATASOURCE('SQLOLEDB', 'Data Source=[Server Name];User ID=[User ID];Password=[Password]').MyServer.DBO.Info

说明:
(1)Server Name:数据库服务器的名称,也可以是IP地址。
(2)User ID:登录服务器的用户ID号。
(3)Password:用户密码。
(4)下面的语句最好写在一个存储过程中执行,一定不要放在SQL属性中。

OPENDATASOURCE

不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。

语法

OPENDATASOURCE ( provider_name, init_string )

参数

provider_name

注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。

init_string

连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。

关键字OLE DB 属性有效值和描述
数据源DBPROP_INIT_DATASOURCE要连接的数据源的名称。不同的提供程序用不同的方法对此进行解释。对于 SQL Server OLE DB 提供程序来说,这会指明服务器的名称。对于 Jet OLE DB 提供程序来说,这会指明 .mdb 文件或 .xls 文件的完整路径。
位置DBPROP_INIT_LOCATION要连接的数据库的位置。
扩展属性DBPROP_INIT_PROVIDERSTRING提供程序特定的连接字符串。
连接超时DBPROP_INIT_TIMEOUT超时值,在该超时值后,连接尝试将失败。
用户 IDDBPROP_AUTH_USERID用于该连接的用户 ID。
密码DBPROP_AUTH_PASSWORD用于该连接的密码。
目录DBPROP_INIT_CATALOG连接到数据源时的初始或默认的目录名称。

注释

OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。

与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。

示例

下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。

SELECT   *
FROM      OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=ServerName;User ID=MyUID;Password=MyPass'
         ).Northwind.dbo.Categories

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。

SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
如:
 select * from OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.123;User ID=[sa];Password=[pwd]).database.DBO.[table] where id=33266
 
 
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的
 STATEMENT'OpenRowset/OpenDatasource' 的访问,
因为此组件已作为此服务器安全配置的一部分而被关闭。
系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。
有关启用 'Ad Hoc Distributed Queries' 的详细信息,
请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 
 
操作如下:
如果用SQL2005数据库,在启用生产制造产品下做年结时必须进行设置:
SQL2005-配置工具-外围应用配置器-功能的外围应用配置-即席远程查询,
将复选框选中,否则生产制造产品无法年结成功;(见图) 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java导入Excel数据库张表的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelImporter { public static void main(String[] args) { String excelFilePath = "path/to/excel/file.xlsx"; try { FileInputStream inputStream = new FileInputStream(new File(excelFilePath)); Workbook workbook = new XSSFWorkbook(inputStream); Iterator<Sheet> sheetIterator = workbook.iterator(); while (sheetIterator.hasNext()) { Sheet sheet = sheetIterator.next(); String tableName = sheet.getSheetName(); Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); // 获取数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password"); // 构建插入语句 StringBuilder sql = new StringBuilder(); sql.append("INSERT INTO ").append(tableName).append(" VALUES ("); for (int i = 0; i < row.getLastCellNum(); i++) { sql.append("?,"); } sql.deleteCharAt(sql.length() - 1); sql.append(")"); // 创建预编译语句 PreparedStatement statement = connection.prepareStatement(sql.toString()); int cellIndex = 0; while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); statement.setString(cellIndex + 1, cell.getStringCellValue()); cellIndex++; } // 执行插入语句 statement.executeUpdate(); // 关闭连接和语句 statement.close(); connection.close(); } } workbook.close(); inputStream.close(); System.out.println("Excel导入数据库成功!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,上述代码数据库连接信息需要根据实际情况进行修改。此外,还需要添加Apache POI和MySQL驱动的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值