用SQL直接将文件内容导入数据表中

ContractedBlock.gif ExpandedBlockStart.gif 把文件内容以批语据形式导入数据表
None.gifBULK INSERT
None.gif以用户指定的格式复制一个数据文件至数据库表或视图中。
None.gif
None.gif语法
None.gif
BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }
None.gif    
[ WITH
None.gif        ( 
None.gif            [ BATCHSIZE [ = batch_size 
] ]
None.gif            
[ [ , ] CHECK_CONSTRAINTS ]
None.gif            
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]
None.gif            
[ [ , ] DATAFILETYPE [ =
None.gif                { 'char' | 'native'| 'widechar' | 'widenative' } 
] ]
None.gif            
[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]
None.gif            
[ [ , ] FIRSTROW [ = first_row ] ]
None.gif            
[ [ , ] FIRE_TRIGGERS ]
None.gif            
[ [ , ] FORMATFILE = 'format_file_path' ]
None.gif            
[ [ , ] KEEPIDENTITY ]
None.gif            
[ [ , ] KEEPNULLS ]
None.gif            
[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]
None.gif            
[ [ , ] LASTROW [ = last_row ] ]
None.gif            
[ [ , ] MAXERRORS [ = max_errors ] ]
None.gif            
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,dot.gif]  ]
None.gif            
[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]
None.gif            
[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]
None.gif            
[ , [ TABLOCK ] ] 
None.gif         
None.gif    ] 
None.gif
None.gif
--=================================================
None.gif--
读取文件将文件中的数据导入数据库对应表
None.gif
CREATE   PROCEDURE   Proc_TxtToTable   
None.gif
@dataPath   varchar(1000)   
None.gif
as
None.gif
--set @dataPath = 'D:\test.txt'
None.gif
declare   @ws_sql   varchar(1000)   
None.gif
set   @ws_sql='BULK   INSERT   tmptable   FROM   '''+rTrim(@dataPath)+''''   
None.gif
set   @WS_sql=@ws_sql+' WITH (DATAFILETYPE = '''+'char'+''', FIELDTERMINATOR = '''+','+''')'   
None.gif
exec(@ws_sql)   
None.gif
if   @@error<>0   
None.gif
print '数据导入出错!'   
None.gif
else     
None.gif
print '数据导入成功!' 
None.gif
--=================================================
None.gif
参数
None.gif
'database_name'
None.gif
None.gif是包含指定表或视图的数据库的名称。如果未指定,则系统默认为当前数据库。
None.gif
None.gif
'owner'
None.gif
None.gif是表或视图所有者的名称。当执行大容量复制操作的用户拥有指定的表或视图时,owner 是可选项。如果没有指定 owner 并且执行大容量复制操作的用户不拥有指定的表或视图,则 Microsoft
&reg; SQL Server&#8482; 将返回错误信息并取消大容量复制操作。
None.gif
None.gif
'table_name'
None.gif
None.gif是大容量复制数据于其中的表或视图的名称。只能使用那些所有的列引用相同基表所在的视图。有关向视图中复制数据的限制的更多信息,请参见 
INSERT。 
None.gif
None.gif
'data_file'
None.gif
None.gif是数据文件的完整路径,该数据文件包含要复制到指定表或视图的数据。
BULK INSERT 从磁盘复制数据(包括网络、软盘、硬盘等)。 
None.gif
None.gifdata_file 必须从运行 SQL Server 的服务器指定有效路径。如果 data_file 是远程文件,则请指定通用命名规则 (UNC) 名称。
None.gif
None.gifBATCHSIZE 
[ = batch_size ]
None.gif
None.gif指定批处理中的行数。每个批处理作为一个事务复制至服务器。SQL Server提交或回滚(在失败时)每个批处理的事务。默认情况下,指定数据文件中的所有数据是一个批处理。
None.gif
None.gifCHECK_CONSTRAINTS
None.gif
None.gif指定在大容量复制操作中检查 table_name 的任何约束。默认情况下,将会忽略约束。
None.gif
None.gifCODEPAGE 
[ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]
None.gif
None.gif指定该数据文件中数据的代码页。仅当数据含有字符值大于 
127 或小于 32 的 charvarchar 或 text 列时,CODEPAGE 才是适用的。
None.gif
None.gifCODEPAGE 值 描述 
None.gifACP 
charvarchar 或 text 数据类型的列从 ANSI/Microsoft Windows&reg; 代码页 ISO 1252 转换为 SQL Server 代码页。 
None.gifOEM(默认值) 
charvarchar 或 text 数据类型的列被从系统 OEM 代码页转换为 SQL Server 代码页。 
None.gif
RAW 并不进行从一个代码页到另一个代码页的转换;这是最快的选项。 
None.gifcode_page 特定的代码页号码,例如 
850。 
None.gif
None.gif
None.gifDATAFILETYPE 
[ = {'char' | 'native' | 'widechar' | 'widenative' } ]
None.gif
None.gif指定 
BULK INSERT 使用指定的默认值执行复制操作。
None.gif
None.gifDATAFILETYPE 值 描述 
None.gif
char(默认值) 从含有字符数据的数据文件执行大容量复制操作。 
None.gifnative 使用 native(数据库)数据类型执行大容量复制操作。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。 
None.gifwidechar 从含有 
Unicode 字符的数据文件中执行大容量复制操作。 
None.gifwidenative 执行与 native 相同的大容量复制操作,不同之处是 
charvarchar 和 text 列在数据文件中存储为 Unicode。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。该选项是对 widechar 选项的一个更高性能的替代,并且它用于使用数据文件从一个运行 SQL Server 的计算机向另一个计算机传送数据。当传送含有 ANSI 扩展字符的数据时,使用该选项以便利用 native 模式的性能。 
None.gif
None.gif
None.gifFIELDTERMINATOR 
[ = 'field_terminator' ]
None.gif
None.gif指定用于 
char 和 widechar 数据文件的字段终止符。默认的字段终止符是 \t(制表符)。
None.gif
None.gifFIRSTROW 
[ = first_row ]
None.gif
None.gif指定要复制的第一行的行号。默认值是 
1,表示在指定数据文件的第一行。
None.gif
None.gifFIRE_TRIGGERS
None.gif
None.gif指定目的表中定义的任何插入触发器将在大容量复制操作过程中执行。如果没有指定 FIRE_TRIGGERS,将不执行任何插入触发器。
None.gif
None.gifFORMATFILE 
[ = 'format_file_path' ]
None.gif
None.gif指定一个格式文件的完整路径。格式文件描述了含有存储响应的数据文件,这些存储响应是使用 bcp 实用工具在相同的表或视图中创建的。格式文件应该用于以下情况: 
None.gif
None.gif数据文件含有比表或视图更多或更少的列。
None.gif
None.gif
None.gif列使用不同的顺序。
None.gif
None.gif
None.gif列分割符发生变化。
None.gif
None.gif
None.gif数据格式有其它的改变。通常,格式文件通过 bcp 实用工具创建并且根据需要用文本编辑器修改。有关更多信息,请参见 bcp 实用工具。 
None.gifKEEPIDENTITY
None.gif
None.gif指定标识列的值存在于导入文件中。如果没有指定 KEEPIDENTITY,在导入的数据文件中此列的标识值将被忽略,并且 SQL Server 将根据表创建时指定的种子值和增量值自动赋给一个唯一的值。假如数据文件不含该表或视图中的标识列,使用一个格式文件来指定在导入数据时,表或视图中的标识列应被忽略;SQL Server 自动为此列赋予唯一的值。有关详细信息,请参见 
DBCC CHECKIDENT。 
None.gif
None.gifKEEPNULLS
None.gif
None.gif指定在大容量复制操作中空列应保留一个空值,而不是对插入的列赋予默认值。
None.gif
None.gifKILOBYTES_PER_BATCH 
[ = kilobytes_per_batch ]
None.gif
None.gif指定每个批处理中数据的近似千字节数(KB)。默认情况下,KILOBYTES_PER_BATCH 未知。
None.gif
None.gifLASTROW 
[ = last_row ]
None.gif
None.gif指定要复制的最后一行的行号。默认值是 
0,表示指定数据文件中的最后一行。
None.gif
None.gifMAXERRORS 
[ = max_errors ]
None.gif
None.gif指定在大容量复制操作取消之前可能产生的错误的最大数目。不能被大容量复制操作导入的每一行将被忽略并且被计为一次错误。如果没有指定 max_errors,默认值为 
0
None.gif
None.gif
ORDER ( { column [ ASC | DESC ] } [ ,dot.gif]  
None.gif
None.gif指定数据文件中的数据如何排序。如果装载的数据根据表中的聚集索引进行排序,则可以提高大容量复制操作的性能。如果数据文件基于不同的顺序排序,或表中没有聚集索引,
ORDER 子句将被忽略。给出的列名必须是目的表中有效的列。默认情况下,大容量插入操作假设数据文件未排序。
None.gif
None.gifn
None.gif
None.gif是表示可以指定多列的占位符。
None.gif
None.gifROWS_PER_BATCH 
[ = rows_per_batch ]
None.gif
None.gif指定每一批处理数据的行数(即 rows_per_bacth)。当没有指定 BATCHSIZE 时使用,导致整个数据文件作为单个事务发送给服务器。服务器根据 rows_per_batch 优化大容量装载。默认情况下,ROWS_PER_BATCH 未知。
None.gif
None.gifROWTERMINATOR 
[ = 'row_terminator' ]
None.gif
None.gif指定对于 
char 和 widechar 数据文件要使用的行终止符。默认值是 \n(换行符)。
None.gif
None.gifTABLOCK
None.gif
None.gif指定对于大容量复制操作期间获取一个表级锁。如果表没有索引并且指定了 TABLOCK,则该表可以同时由多个客户端装载。默认情况下,锁定行为是由表选项 
table lock on bulk load 决定的。只在大容量复制操作期间控制锁会减少表上的锁争夺,极大地提高性能。
None.gif
None.gif注释
None.gif
BULK INSERT 语句能在用户定义事务中执行。对于一个用 BULK INSERT 语句和 BATCHSIZE 子句将数据装载到使用多个批处理的表或视图中的用户定义事务来说,回滚它将回滚所有发送给 SQL Server 的批处理。
None.gif
None.gif权限
None.gif只有 sysadmin 和 bulkadmin 固定服务器角色成员才能执行 
BULK INSERT
None.gif
None.gif示例
None.gif本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (
|) 字符作为字段终止符,使用 |\n 作为行终止符。
None.gif
None.gif
BULK INSERT tmp_Table
None.gif   
FROM 'f:\orders\lineitem.tbl'
None.gif   
WITH 
None.gif      (
None.gif         FIELDTERMINATOR 
= '|',
None.gif         ROWTERMINATOR 
= '|\n'
None.gif      )
None.gif
None.gif本例指定 FIRE_TRIGGERS 执行触发器参数。
None.gif
None.gif
BULK INSERT Northwind.dbo.[Order Details]
None.gif   
FROM 'f:\orders\lineitem.tbl'
None.gif   
WITH
None.gif     (
None.gif    
--FIELDTERMINATOR字段分隔符
None.gif
        FIELDTERMINATOR = '|',
None.gif    
--行分隔符
None.gif
        ROWTERMINATOR = ':\n',
None.gif        FIRE_TRIGGERS
None.gif     )

转载于:https://www.cnblogs.com/hanguoji/archive/2006/06/28/437824.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值