SQL Server2000 数据导入Excel

介绍了一个存储过程SP_BulkInsertFromExcel,用于将Excel文件中的数据批量导入到指定的数据库表中。此过程考虑了不同列的数据类型及是否允许为空等因素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*+--------------------------------------  
| 存储过程:SP_BulkInsertFromExcel  
| 功能说明:根据Excel文件导入数据库中的表  
| 维护记录:  
| 调用方式:EXEC SP_BulkInsertFromExcel 'C:鞍山市地方税务局登记信息表.xls','aaaa','组织机构代码,注册号,企业名称,法定代表人,纳税人标识,注册地址,纳税人主管税务机关,主体税种,登记状态','地税登记信息'
| 联系方式:Spark.Zou@hotmail.com  
| 创建日期:2007-05-07 22:26:09.873  
| 注意事项:   
| 版权信息: 邹黎鹏  
--------------------------------------+
*/
  
CREATE  PROC  SP_BulkInsertFromExcel  
@fname   NVARCHAR(260),  
@sheename  Nvarchar(256), 
@columnname varchar(2000), 
@TABLENAME  VARCHAR(100)  
as  
set nocount on  

declare @srv_name sysname,@sql nvarchar(4000),@COLUMN VARCHAR(2000),@IDENTITYNAME VARCHAR(100),@SQLWhere varchar(2000)  
SELECT @COLUMN='',@IDENTITYNAME='',@SQLWhere='',@sql=''
  

SELECT @COLUMN=@COLUMN+','+NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@TABLENAMEAND NAME NOT IN  
  (  
  
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns  
     
WHERE TABLE_NAME=@TABLENAME AND  COLUMNPROPERTY(        
        
OBJECT_ID(@TABLENAME),COLUMN_NAME,'IsIdentity')=1  
  )  
 
ORDER BY COLORDER  
SET @COLUMN=STUFF(@COLUMN,1,1,'')  


SELECT   
     
@SQLWhere=@SQLWhere+' and '+A.NAME+'<>'''' AND '  
FROM SYSCOLUMNS A  
 
LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID  
WHERE A.ID=OBJECT_ID(@TABLENAMEAND A.ISNULLABLE!=1 AND ISNULL(E.TEXT,'')=''  
  
SET @SQLWhere=stuff(@SQLWhere,1,1,'')  
SET @SQLWhere=LEFT(@SQLWhere,LEN(@SQLWhere)-3)  

if @SQLWhere<>''
begin
SET @sql=' INSERT INTO '+@TABLENAME+' ( '+@columnname+' )
        SELECT 
'+@columnname+'
         from OPENROWSET(
''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1;DATABASE='+@fname+''',['+@sheename+'$])
        where 1=1  
'+@SQLWhere
end
else
begin
SET @sql=' INSERT INTO '+@TABLENAME+' ( '+@columnname+' )
        SELECT 
'+@columnname+'
         from OPENROWSET(
''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1;DATABASE='+@fname+''',['+@sheename+'$])
        
'
end

Exec(@sql)  


GO
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值