随笔-199  评论-203  文章-11  trackbacks-0

    今天做這個東西花了我好長時間才搞定,貼的網上和大家共享一下,如果大家有更好的方法,請跟帖告知!
在此非常感謝!


/***************************************************/
/**Table:型體單價                                                                  */
/***************************************************/
IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='型體單價')
-- DROP TABLE 型體單價 
GO

CREATE TABLE 型體單價
(
 型體ID Int IDENTITY(1,1) PRIMARY KEY ,
 型體編號 Varchar(20),
 斬刀編號 Varchar(10),
 部門名稱 Varchar(10),
 總單價 Decimal(5,3),
 起止日期 smalldatetime,
 終止日期 smalldatetime,
 修改者 Varchar(10),
 修改日期 DateTime
)
GO

/***************************************************/
/**Table:型體單價明細       */
/***************************************************/
IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='型體單價明細')
-- DROP TABLE 型體單價明細
GO

CREATE TABLE 型體單價明細
(
 型體ID Int,
 序號  Int,
 工序名稱 Varchar(30),
 操作機器 Varchar(12),
 工種  Varchar(10),
 操作時間 Decimal(5,1),
 標準時間 Decimal(5,1),
 單價  Decimal(5,3),
 標準日產能 Int,
 需求人數 int,
 備注  Varchar(30),
 修改者 Varchar(10),
 修改日期 DateTime
)
GO


--通過存儲過程將Excel資料導入到數據庫
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'proc_excelInSql' AND type = 'P')
   DROP PROCEDURE proc_excelInSql
GO

--接收兩個參數
CREATE PROCEDURE proc_excelInSql
@address Varchar(100), --1、文件地址
@name Varchar(30)  --2、文件名
AS
DECLARE @STR VARCHAR(8000)
--將整理好的數據插入到指定數據庫中。
 SET @STR='INSERT INTO spg_system.dbo.型體單價明細(型體ID,序號,工序名稱,操作機器,工種,操作時間,'
 SET @STR=@STR+'標準時間,單價,標準日產能,需求人數,備注,修改者,修改日期)'
--將型體字段為空的替換為檔期型體的型體ID編號,修改者默認為"Excel 導入",修改日期默認為檔期日期。
 SET @STR=@STR+'SELECT ISNULL((SELECT 型體ID FROM SPG_SYSTEM.dbo型體單價 where 型體編號='''+@name+'''),'
 SET @STR=@STR+'0) as 型體ID, 序號,工序名稱,ISNULL(操作機器,'''') 操作機器,ISNULL(工種,'''') 工種,'
 SET @STR=@STR+'ISNULL(操作時間,0) 操作時間,ISNULL(標準時間,0.0) 標準時間,單價,ISNULL(標準日產能,0)'
 SET @STR=@STR+' 標準日產能,ISNULL(需求人數,0) 需求人數,備注,ISNULL(修改者,''Excel 導入'') 修改者,'
 SET @STR=@STR+'ISNULL(修改日期,getDATE()) 修改日期 FROM ('
--增加三個字段型體ID、修改者和修改日期
 SET @STR=@STR+'SELECT null 型體ID, 序號,工序名稱,操作機器,工種,操作時間,標準時間,單價,標準日產能,需求人數,備注,null 修改者,null 修改日期 FROM('
--從Excel讀出數據,并修改文件名和過濾沒有用的資料行
 SET @STR=@STR+'SELECT  CAST(F1 AS INT) 序號, F2 工序名稱,F3 操作機器,F4 工種,F5 操作時間,CAST(F6 AS DECIMAL(4,1)) 標準時間,
    cast(F7 as decimal(5,3))  單價,CAST(ROUND(F8,0) AS INT)  標準日產能,CAST(F9 as DECIMAL(4,2)) 需求人數,
    ISNULL( F10,'''') as 備注 FROM '
 SET @STR=@STR+'OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''Excel 5.0;Database='+@address+''', ''SELECT * FROM ['+@name+'$]'')'
 SET @STR=@STR+')aa  where 序號 != 0'
 SET @STR=@STR+')BB ORDER BY 序號'
EXEC (@STR)
GO

--調用存儲過程的時候,注意D盤要有相應的文件,
exec proc_excelinsql 'D:\184240.xls','184240'
下載184240.xls'文件

如有不明之處請Email:kunpeng.niu@163.com


posted on 2009-03-10 17:11 Werther 阅读(1245) 评论(3)  编辑  收藏 所属分类: 15.SQL Server

评论:
# re: 將Excel的數據插入到數據庫中示例 2009-03-10 18:43 | Jie
执行完后报错:
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'spg_system.dbo.型體單價明細' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'SPG_SYSTEM.dbo型體單價' 无效。  回复  更多评论
  
# re: 將Excel的數據插入到數據庫中示例 2009-03-10 19:21 | Werther
@Jie
解決方案一:
我上面忘記說明,你需要首先在你的SQL Server上面創建一個名為:spg_system的數據庫,把用來測試的表創建在spg_system這個數據庫裡面。
解決方案二:
你把表創建在那個數據庫裡面,就把spy_system改成那一個數據庫名。  回复  更多评论
  
# re: 將Excel的數據插入到數據庫中示例 2009-03-10 21:27 | Jie
是了,确实可以,很好很强大  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: