简介:微软SQL Server数据库SQL语句导入导出大全,包括与其他数据库和文件的数据的导入导出。

/*******  导出到excel
EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""’

/***********  导入Excel
SELECT *
FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
  ’Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名
FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,
  ’Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

/** 导入文本文件
EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件
EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’

EXEC master..xp_cmdshell ’bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword’

导出到TXT文本,用逗号分开
exec master..xp_cmdshell ’bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password’

BULK INSERT 库名..表名
FROM ’c:\test.txt’
WITH (
    FIELDTERMINATOR = ’;’,
    ROWTERMINATOR = ’\n’
)

--/* dBase IV文件
select * from
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料4.dbf]’)
--*/

--/* dBase III文件
select * from
OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
,’dBase III;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料3.dbf]’)
--*/

--/* FoxPro 数据库
select * from openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’,
’select * from [aa.DBF]’)
--*/

/**************导入DBF文件****************/
select * from openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF’,
’select * from customer where country != "USA" order by country’)
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset(’MSDASQL’,
’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’,
’select * from [aa.DBF]’)
select * from 表

说明:

SourceDB=c:\  指定foxpro表所在的文件夹
aa.DBF        指定foxpro表的文件名.

/*************导出到Access********************/
insert into openrowset(’Microsoft.Jet.OLEDB.4.0’,
   ’x:\A.mdb’;’admin’;’’,A表) select * from 数据库名..B表

/*************导入Access********************/
insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’,
   ’x:\A.mdb’;’admin’;’’,A表)

*********************  导入 xml 文件

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc =’
<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
      </Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
             white red">
            <Urgency>Important</Urgency>
            Happy Customer.
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>

-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)
      WITH (oid     char(5),
            amount  float,
            comment ntext ’text()’)
EXEC sp_xml_removedocument @idoc

/********************导整个数据库*********************************************/

用bcp实现的存储过程 //from www.w3sky.com

/*
 实现数据导入/导出的存储过程
         根据不同的参数,可以实现导入/导出整个数据库/单个表
 调用示例:
--导出调用示例
----导出单个表
exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,1
----导出整个数据库
exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,1

--导入调用示例
----导入单个表
exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,0
----导入整个数据库
exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,0

*/
if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1)
 drop procedure File2Table
go
create procedure File2Table
@servername varchar(200)  --服务器名
,@username varchar(200)   --用户名,如果用NT验证方式,则为空’’
,@password varchar(200)   --密码
,@tbname varchar(500)   --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表
,@filename varchar(1000)  --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
,@isout bit      --1为导出,0为导入 //from www.w3sky.com
as
declare @sql varchar(8000)

if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表
begin
 set @sql=’bcp ’+@tbname
  +case when @isout=1 then ’ out ’ else ’ in ’ end
  +’ "’+@filename+’" /w’
  +’ /S ’+@servername
  +case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end
  +’ /P ’+isnull(@password,’’)
 exec master..xp_cmdshell @sql
end
else
begin --导出整个数据库,定义游标,取出所有的用户表
 declare @m_tbname varchar(250)
 if right(@filename,1)<>’\’ set @filename=@filename+’\’

set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects where xtype=’’U’’’
 exec(@m_tbname)
 open #tb
 fetch next from #tb into @m_tbname
 while @@fetch_status=0
 begin
  set @sql=’bcp ’+@tbname+’..’+@m_tbname
   +case when @isout=1 then ’ out ’ else ’ in ’ end
   +’ "’+@filename+@m_tbname+’.txt " /w’
   +’ /S ’+@servername
   +case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end
   +’ /P ’+isnull(@password,’’)
  exec master..xp_cmdshell @sql
  fetch next from #tb into @m_tbname
 end
 close #tb
 deallocate #tb 
end
go

/**********************Excel导到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
实现将一个Excel文件内容导入到一个文本文件

假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
且银行帐号导出到文本文件后分两部分,前8位和后8位分开。

如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2
然后就可以用下面的语句进行插入
注意文件名和目录根据你的实际情况进行修改.

insert into
opendatasource(’MICROSOFT.JET.OLEDB.4.0’
,’Text;HDR=Yes;DATABASE=C:\’
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
from
opendatasource(’MICROSOFT.JET.OLEDB.4.0’
,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’
--,Sheet1$)
)...[Sheet1$]

如果你想直接插入并生成文本文件,就要用bcp

declare @sql varchar(8000),@tbname varchar(50)

--首先将excel表内容导入到一个全局临时表
select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’
 ,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
into ’+@tbname+’ from
opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’
,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’’
)...[Sheet1$]’
exec(@sql)

--然后用bcp从全局临时表导出到文本文件
set @sql=’bcp "’+@tbname+’" out "c:\aa.txt" /S"(local)" /P"" /c’
exec master..xp_cmdshell @sql

--删除临时表
exec(’drop table ’+@tbname)

用bcp将文件导入导出到数据库的存储过程:

/*--bcp-二进制文件的导入导出

支持image,text,ntext字段的导入/导出
 image适合于二进制文件;text,ntext适合于文本数据文件

注意:导入时,将覆盖满足条件的所有行
  导出时,将把所有满足条件的行也出到指定文件中

此存储过程仅用bcp实现
邹建 2003.08-----------------*/

/*--调用示例
--数据导出
 exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’

--数据导出
 exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’,’’,0
--*/
if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[p_binaryIO]
GO

Create proc p_binaryIO
@servename varchar (30),--服务器名称
@username varchar (30), --用户名
@password varchar (30), --密码
@tbname varchar (500),  --数据库..表名
@fdname varchar (30),  --字段名
@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak
@tj varchar (1000)=’’,  --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀
@isout bit=1   --1导出((默认),0导入
AS
declare @fname_in varchar(1000) --bcp处理应答文件名
 ,@fsize varchar(20)   --要处理的文件的大小
 ,@m_tbname varchar(50)  --临时表名
 ,@sql varchar(8000)

--则取得导入文件的大小
if @isout=1
 set @fsize=’0’
else
begin
 create table #tb(可选名 varchar(20),大小 int
  ,创建日期 varchar(10),创建时间 varchar(20)
  ,上次写操作日期 varchar(10),上次写操作时间 varchar(20)
  ,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)
 insert into #tb
 exec master..xp_getfiledetails @fname
 select @fsize=大小 from #tb
 drop table #tb
 if @fsize is null
 begin
  print ’文件未找到’
  return
 end

end

--生成数据处理应答文件
set @m_tbname=’[##temp’+cast(newid() as varchar(40))+’]’
set @sql=’select * into ’+@m_tbname+’ from(
 select null as 类型
 union all select 0 as 前缀
 union all select ’+@fsize+’ as 长度
 union all select null as 结束
 union all select null as 格式
 ) a’
exec(@sql)
select @fname_in=@fname+’_temp’
 ,@sql=’bcp "’+@m_tbname+’" out "’+@fname_in
 +’" /S"’+@servename
 +case when isnull(@username,’’)=’’ then ’’
  else ’" /U"’+@username end
 +’" /P"’+isnull(@password,’’)+’" /c’
exec master..xp_cmdshell @sql
--删除临时表
set @sql=’drop table ’+@m_tbname
exec(@sql)

if @isout=1
begin
 set @sql=’bcp "select top 1 ’+@fdname+’ from ’
  +@tbname+case isnull(@tj,’’) when ’’ then ’’
   else ’ where ’+@tj end
  +’" queryout "’+@fname
  +’" /S"’+@servename
  +case when isnull(@username,’’)=’’ then ’’
   else ’" /U"’+@username end
  +’" /P"’+isnull(@password,’’)
  +’" /i"’+@fname_in+’"’
 exec master..xp_cmdshell @sql
end
else
begin
 --为数据导入准备临时表
 set @sql=’select top 0 ’+@fdname+’ into ’
  +@m_tbname+’ from ’ +@tbname
 exec(@sql)

--将数据导入到临时表
 set @sql=’bcp "’+@m_tbname+’" in "’+@fname
  +’" /S"’+@servename
  +case when isnull(@username,’’)=’’ then ’’
   else ’" /U"’+@username end
  +’" /P"’+isnull(@password,’’)
  +’" /i"’+@fname_in+’"’
 exec master..xp_cmdshell @sql
 
 --将数据导入到正式表中
 set @sql=’update ’+@tbname
  +’ set ’+@fdname+’=b.’+@fdname
  +’ from ’+@tbname+’ a,’
  +@m_tbname+’ b’
  +case isnull(@tj,’’) when ’’ then ’’
   else ’ where ’+@tj end
 exec(@sql)

--删除数据处理临时表
 set @sql=’drop table ’+@m_tbname
end

--删除数据处理应答文件
set @sql=’del ’+@fname_in
exec master..xp_cmdshell @sql

go

/** 导入文本文件
EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’

改为如下,不需引号
EXEC master..xp_cmdshell ’bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件
EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’
此句需加引号

Datenimport/-export - Werkzeuge

Ad-hoc Abfragen mit OPENROWSET und OPENDATASOURCE

[Achtung. Diese Seite wird zur Zeit noch bearbeitet...]

Ad-hoc Abfragen sind ein flexibles Mittel, um schnell innerhalb von Transact-SQL auf Daten einer fremden Datenquelle zuzugreifen. Da bei diesem Aufruf die Verbindungsoptionen (insbesondere der Sicherheitskontext) dynamisch angegeben wird, sollte in jedem Fall geprüft werden, ob solche Abfragen überhaupt zugelassen werden sollten (s.dazu auch: OPENROWSET-Problem in SQL Server 7.0).

OPENROWSET

Mit Hilfe der Funktion OPENROWSET kann ein Rowset von einer OLEDB-Datenquelle geöffnet werden. Diese Funktion benötigt als Parameter den zu verwendenden OLEDB-Provider und alle weiteren notwendigen Verbindungseigenschaften incl. des Sicherheitskontexts. Als letzter Parameter wird die auszuführende SELECT-Anweisung angegeben.

Syntax:

Die Grundsyntax für OPENROWSET sieht so aus:

OPENROWSET ('name_des_OLEDB_providers' , 'verbindungszeichenfolge', 'abfrage')

Die Parameter

name_des_OLEDB_providers

Der Name des OLEDB-Providers, z.B. SQLOLEDB für Zugriffe auf SQL Server, Microsoft.Jet.OLEDB.4.0 für den Zugriff auf Access-Datenbanken, Excel-Arbeitsmappen, Textdateien, dBase-Dateien etc.)

verbindungszeichenfolge

Die Verbindungszeichenfolge für den OLEDB-Provider. Die hier anzugebende Zeichenfolge wird vom SQL Server intern interpretiert und entspricht (leider) nicht genau dem "gewohnten" Aufbau.

abfrage

Die Abfrage auf die Daten in der fernen Datenquelle. In der Regel ein SELECT auf die gewünschte Tabelle

Beispiele SQL Server/SQLOLEDB

Zugriff auf einen anderen SQL Server mit vertrauter Sicherheit

-- Select auf anderen SQL Server mit vertrauter Verbindung   
 SELECT * FROM OPENROWSET  
 ('SQLOLEDB',   
  'Server=anderer_server;database=Northwind;TRUSTED_CONNECTION=YES;',   
  'SELECT * FROM northwind.dbo.orders')

Vorsicht Falle!

Das folgende Beispiel gibt Server und Datenbank über die OLEDB-Properties an; diese Parameter werden jedoch ignoriert

-- vorsicht: Hier werden Data Source und Initial Catalog ignoriert...  
 -- stattdessen wird eine Verbindung zum lokalen Server aufgebaut...  
 SELECT * FROM  
 OPENROWSET('SQLOLEDB',   
 'Data Source=anderer_Server;Initial Catalog=beispiel5;TRUSTED_CONNECTION=YES;',   
 'SELECT @@servername, * FROM northwind.dbo.orders')

Update auf Daten eines anderen SQL Servers

Vorsicht! Diese Anweisung ändert Daten auf dem angegebenen Server.

UPDATE  
 OPENROWSET('SQLOLEDB',   
 'Server=anderer_server;Database=Northwind;TRUSTED_CONNECTION=YES;',   
 'SELECT * FROM northwind.dbo.orders')   
 SET orderdate = orderdate + 1

Einfügen neuer Datensätze in einer "entfernten" Tabelle

Vorsicht! Diese Anweisung ändert Daten auf dem angegebenen Server.

INSERT INTO  
 OPENROWSET('SQLOLEDB',   
 'Server=anderer_server;Database=Northwind;TRUSTED_CONNECTION=YES;',   
 'SELECT * FROM northwind.dbo.region')   
 VALUES (99, 'Test')

Löschen von Daten in einer Tabelle

Vorsicht! Diese Anweisung ändert Daten auf dem angegebenen Server.

DELETE FROM  
 OPENROWSET('SQLOLEDB',   
 'Server=anderer_server;Database=Northwind;TRUSTED_CONNECTION=YES;',   
 'SELECT * FROM northwind.dbo.region')   
 WHERE RegionID = 99

Beispiele Access Datenbanken/JET

Zugriff auf Daten in einer Access-Datenbank mit SELECT

SELECT * FROM  
 OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
 ';Database=C:\Access-Datenbanken\nordwind.mdb',  
 'SELECT * FROM artikel')

Zugriff auf Daten in einer kennwortgeschützten Access-Datenbank mit SELECT

-- Select mit Kennwortgeschützter Datenbank  
 SELECT * FROM  
 OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
 ';Database=C:\Access-Datenbanken\vertraulich.mdb;pwd=geheim;',  
 'SELECT * FROM umsatz')   
 GO

Aktualisieren von Daten in einer Jet-Datenbank

Vorsicht! Diese Anweisung ändert Daten in der angegebenen Datenbank.

UPDATE  
 OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
 ';Database=C:\Access-Datenbanken\nordwind.mdb',  
 'SELECT * FROM artikel')  
 SET einzelpreis = einzelpreis + 1  
 GO

Beispiele Excel-Arbeitsmappen/JET

Abfragen eines Arbeitsblatts

SELECT * FROM   
 OPENROWSET('Microsoft.JET.OLEDB.4.0',  
 'Excel 8.0;Database=C:\training\inventur.xls',  
 'SELECT * FROM [Filiale1$]')

Abfragen bestimmter Zellen in einem Arbeitsblatt

SELECT * FROM   
 OPENROWSET('Microsoft.JET.OLEDB.4.0',  
 'Excel 8.0;HDR=NO;Database=C:\training\inventur.xls',  
 'SELECT * FROM [Filiale1$A2:B4]')

Aktualisieren von Zellen in einem Arbeitsblatt

Vorsicht! Dieses Beispiel ändert Daten im angegebenen Excel-Arbeitsblatt

UPDATE  
 OPENROWSET('Microsoft.JET.OLEDB.4.0',  
 'Excel 8.0;Database=C:\training\inventur.xls',  
 'SELECT * FROM [Filiale1$]')  
 SET Bestand = 1 WHERE Bestand = 2

Hinzufügen von Daten in ein Excel-Arbeitsblatt

Vorsicht! Dieses Beispiel ändert Daten im angegebenen Excel-Arbeitsblatt

INSERT INTO  
 OPENROWSET('Microsoft.JET.OLEDB.4.0',  
 'Excel 8.0;Database=C:\training\inventur.xls',  
 'SELECT * FROM [Filiale1$]')  
 (Produkt, Bestand) VALUES ('Test', 27)  
 GO

Beispiele Textdateien/JET

Abfragen von Daten aus einer Textdatei

-- Abfragen einer Textdatei  
 SELECT * FROM   
 OPENROWSET('MICROSOFT.JET.OLEDB.4.0',  
 'Text;Database=C:\;',   
 'SELECT * FROM [orders#txt]')  
 /* Inhalt der Datei SCHEMA.INI auf C:\  
 [orders.txt]  
 Format=TABDelimited  
 ColNameHeader=false  
 MaxScanRows=20  
 */

Anfügen eines Satzes in eine Textdatei

-- Einfügen eines neuen Satzes  
 INSERT INTO  
 OPENROWSET('MICROSOFT.JET.OLEDB.4.0',  
 'Text;Database=C:\;',   
 'SELECT * FROM [textdemo#txt]')  
 VALUES ('XXX', 100)  
 -- Prüfen, ob der neue Satz angefügt wurde:  
 SELECT * FROM  
 OPENROWSET('MICROSOFT.JET.OLEDB.4.0',  
 'Text;Database=C:\;',   
 'SELECT * FROM [textdemo#txt]')  
   
 /* Zugehörige Schema.ini Datei  
 [textdemo.txt]  
 CharacterSet=ANSI  
 Format=TABDelimited  
 ColNameHeader=TRUE  
 MaxScanRows=20  
 */  
 GO

Beispiele HTML-Dateien/Jet

Lesen der Daten aus einer HTML-Tabelle mit Caption

SELECT * FROM  
 OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
 'HTML Import;HDR=NO;Database=http://localhost/beispiele/tablemitcaption.htm;',   
 'SELECT * FROM Beispieltabelle')

OPENDATASOURCE

OPENDATASOURCE wurde im SQL Server 2000 eingeführt. Diese Funktion erlaubt die Verwendung einer OLEDB-Datenquelle in einem vierstelligem Namen. Im Gegensatz zu OPENROWSET werden hier die "echten" OLEDB-Provider Eigenschaften verwendet.

Syntax

OPENDATASOURCE ( provider, provider_zeichenfolge )

Parameter

Beispiele SQL Server/SQLOLEDB

Lesender Zugriff auf Daten eines anderen Servers

-- Integrierte Sicherheit  
 SELECT * FROM   
 OPENDATASOURCE('SQLOLEDB',   
 'Data Source=itrainbo2000;Initial Catalog=Northwind;Integrated Security=SSPI;').Northwind.dbo.orders  
 -- SQL Login  
 SELECT * FROM   
 OPENDATASOURCE('SQLOLEDB',   
 'Data Source=itrainbo2000;Initial Catalog=Northwind;User ID=student;Password=#student#;').Northwind.dbo.orders

Aufruf einer gespeicherten Prozedur mit Parameter auf einem entfernten SQL Server

EXEC   
 OPENDATASOURCE('SQLOLEDB',   
 'Data Source=itrainbo2000;Initial Catalog=Northwind;Integrated Security=SSPI;').Northwind.dbo.CustorderHist 'ALFKI'

Beispiele Access/JET

SELECT auf eine Tabelle in einer Access-Datenbank

SELECT * FROM   
 OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',   
 'Data Source=C:\Access-Datenbanken\nordwind.mdb;')...artikel

SELECT auf eine kennwortgeschützte Tabelle in einer Access-Datenbank

SELECT * FROM   
 OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',   
 'Data Source=C:\Access-Datenbanken\umsatz.mdb;Jet OLEDB:Database Password=geheim')...tabzahlen

Beispiele Excel-Arbeitsmappe/JET

Abfragen des gesamten Inhalts eines Arbeitsblatts

SELECT * FROM   
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]

Der Zugriff auf einzelne Bereiche innerhalb des Arbeitsblatt über Zellenreferenzen ist in Kombination mit OPENDATASOURCE so nicht möglich:

-- Das geht nicht:  
 SELECT * FROM   
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$A1:B3]

Aktualisieren von Werten in einem Excel-Arbeitsblatt

Vorsicht! Dieses Beispiel verändert Daten in dem angegebenen Arbeitsblatt

UPDATE   
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
 SET bestand = bestand + 1

Einfügen einer Zeile in ein Excel-Arbeitsblatt

Vorsicht! Dieses Beispiel verändert Daten in dem angegebenen Arbeitsblatt

INSERT INTO  
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
 (bestand, produkt) VALUES (100, 'Test')

Einfügen von Daten aus einer SQL Server Tabelle in eine Excel-Arbeitsmappe

INSERT INTO   
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
 (Produkt, Bestand)  
 SELECT ProductName, 0 FROM northwind.dbo.products

Beispiele HTML-Dateien/JET

Abfrage einer HTML-Tabelle mit Caption und Spaltenüberschriften

SELECT * FROM   
 OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
 'Extended Properties=HTML Import;Data Source=http://localhost/beispiele/tablemitcaption.htm;')...Beispieltabelle

Erlaubte Operationen nach Datenquelle

Provider SELECT INSERT UPDATE DELETE
SQLOLEDB ja ja ja ja
Jet/Access ja ja ja ja
Jet/Excel ja ja ja nein
Jet/Text ja ja nein nein
Jet/Lotus Worksheet ja ja ja nein
Jet/HTML ja nein nein nein
Jet/dBase ja ja ja ja
Jet/Paradox ja ja ja ja

Typische Fehlermeldungen in Zusammenhang mit OPENROWSET

[OLE/DB provider returned message: Deferred prepare could not be completed.]

Sie haben beim Zugriff auf die Tabelle nicht den voll-qualifierten Namen (datenbank.besitzer.tabelle) angegeben.

Der Ad-hoc-Zugriff auf den OLE DB-Provider 'Microsoft.Jet.OLEDB.4.0' wurde verweigert. Sie müssen auf diesen Provider über einen Verbindungsserver zugreifen.

Der Ad-hoc Zugriff auf den OLEDB-Provider Jet.OLEDB wurde aus Sicherheitsgründen deaktiviert. Greifen Sie entweder über einen Verbindungsserver auf die Daten zu oder aktivieren Sie Adhoc-Zugriffe für den JET-OLEDB Provider (Achtung! Dies beeinträchtigt die Sicherheit des Servers.)

So prüfen Sie, ob Ad-Hoc Abfragen zugelassen sind:

  1. Öffnen Sie im Enterprise Manager den Unterpunkt Sicherheit.
  2. Öffnen Sie das Kontextmenü des Unterpunkts "Verbindungsserver" und wählen Sie den Menüpunkt "Neuer Verbindungsserver" aus.
  3. Wählen Sie in der Auswahlliste "Providername" den Provider "Microsoft.Jet.OLEDB.4.0" aus.
  4. Klicken Sie auf die Schaltfläche "Provideroptionen".
  5. Prüfen Sie in der Liste "Provideroptionen" den Wert für die Option "Ad-hoc Zugriffe nicht zulassen".

Die folgende Anweisung können Sie verwenden, um per Transact-SQL Script zu prüfen, ob Ad-hoc Zugriffe für den Microsoft Jet.4.0.OLEDB Provider zugelassen sind:

EXEC master..xp_instance_regread
        N'HKEY_LOCAL_MACHINE',
        N'SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.Jet.OLEDB.4.0',
        N'DisallowAdhocAccess'

Der OLE DB-Provider 'Microsoft.JET.OLEDB.4.0' meldete einen Fehler.
[OLE/DB provider returned message: Installierbares ISAM nicht gefunden.]

Prüfen Sie, ob der angegebene ISAM-Treiber auf dem Server verfügbar ist. In vielen Fällen führt auch eine fehlerhafte Angabe in der Verbindungszeichenfolge zu dieser Fehlermeldung.

转载于:https://www.cnblogs.com/cjrxlf/archive/2006/04/12/373693.html

SQL数据导入导出语句大全[英文部分比较全面]相关推荐

  1. (转)资料收集,新手必备的sql数据导入导出知识

    转载自csdn SQL SERVER 与ACCESS.EXCEL的数据转换 熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact ...

  2. SQL数据导入导出问题总结

    大家打开这个链接可以看到很多数据库的连接方法.http://www.connectionstrings.com/ 这些数据库之间的数据交换就是这个贴子所要总结的内容. (一)SQL Server之间 ...

  3. [转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE

    需要在c盘下先建立一个data.txt文件,然后在文件的第一行写上你要导出的列,不如说要导出id和name这两列,就在第一行写上 id,name 然后保存,使用下列SQL就可以了,你如果要保持原有的I ...

  4. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  5. 在SQL Server数据库之间进行数据导入导出

    来源:http://kb.cnblogs.com/page/94464/ 在SQL Server数据库之间进行数据导入导出 (1).使用SELECT INTO导出数据 在SQL Server中使用最广 ...

  6. [导入][转]精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  7. SQL SERVER 和ACCESS/excel的数据导入导出

    SQL SERVER 和ACCESS/excel的数据导入导出 常规的数据导入导出: 使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤: 1)在SQL SERVER企业 ...

  8. SQL AZURE数据导入导出,云计算体验之四

    SQL AZURE数据导入导出 我们在之前的文章中为大家介绍了如何在SQL AZURE上创建数据库及管理数据库,从之前的介绍中我们可以看出,SQL AZURE是完全可以满足小型企业的数据库业务需求的. ...

  9. hive数据导入导出

    Hive数据导入导出的几种方式 一,Hive数据导入的几种方式 首先列出讲述下面几种导入方式的数据和hive表. 导入: 本地文件导入到Hive表: Hive表导入到Hive表; HDFS文件导入到H ...

最新文章

  1. 二值人脸对齐--Binarized Convolutional Landmark Localizers for Human Pose Estimation and Face Alignment
  2. python装饰器实现aop_python中面向切片编程(AOP)和装饰器
  3. 基于Ajax的Web框架Echo2 2.0发布
  4. Java.util.Date.getTime()出现负数的问题
  5. 8051单片机指令和寻址方式
  6. 基于SpringJDBC 实现关键功能-EntityOperation
  7. java流与文件——操作文件
  8. android四周阴影效果_帮助独立开发者轻松创建令人惊叹的产品视觉效果
  9. 我这么努力读个博士,难道只是为了进个高校拿5000每月的工资?
  10. 路飞学城Python-Day75
  11. java获取项目路径
  12. hadoop安装教程学习
  13. winform等待窗口之最简单使用线程实现loading
  14. java简历编写及面试技巧
  15. linux安装番茄时钟,Tomato Pie番茄钟
  16. 清北学堂 2017-10-01
  17. 【基础】python操作Word时,自动更新目录(二)
  18. AIS航行状态和船舶类型
  19. IIS5、IIS6、IIS7的ASP.net 请求处理过程比较转
  20. Linux计划任务与日志管理

热门文章

  1. 网络ioctl实践3:设置网卡的mac、ip、子网掩码、广播地址
  2. elementui icon图标大全
  3. 赛卓电子冲刺科创板上市:计划募资11亿元,股东包括尚颀资本等
  4. 小型水库雨水情测报和大坝安全监测
  5. Elasticsearch:如何在搜索时得到精确的总 hits 数
  6. 着手社区建设掌握的两个概念
  7. 20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
  8. continu和break的区别
  9. mysql中实现分类统计查询的步骤_在MySQL中如何进行分组统计查询
  10. 推荐BMS锂电池管理使用KT6368A蓝牙模块芯片