今天做這個(gè)東西花了我好長時(shí)間才搞定,貼的網(wǎng)上和大家共享一下,如果大家有更好的方法,請(qǐng)跟帖告知!
在此非常感謝!
/***************************************************/
/**Table:型體單價(jià) */
/***************************************************/
IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='型體單價(jià)')
-- DROP TABLE 型體單價(jià)
GO
CREATE TABLE 型體單價(jià)
(
型體ID Int IDENTITY(1,1) PRIMARY KEY ,
型體編號(hào) Varchar(20),
斬刀編號(hào) Varchar(10),
部門名稱 Varchar(10),
總單價(jià) Decimal(5,3),
起止日期 smalldatetime,
終止日期 smalldatetime,
修改者 Varchar(10),
修改日期 DateTime
)
GO
/***************************************************/
/**Table:型體單價(jià)明細(xì) */
/***************************************************/
IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME='型體單價(jià)明細(xì)')
-- DROP TABLE 型體單價(jià)明細(xì)
GO
CREATE TABLE 型體單價(jià)明細(xì)
(
型體ID Int,
序號(hào) Int,
工序名稱 Varchar(30),
操作機(jī)器 Varchar(12),
工種 Varchar(10),
操作時(shí)間 Decimal(5,1),
標(biāo)準(zhǔn)時(shí)間 Decimal(5,1),
單價(jià) Decimal(5,3),
標(biāo)準(zhǔn)日產(chǎn)能 Int,
需求人數(shù) int,
備注 Varchar(30),
修改者 Varchar(10),
修改日期 DateTime
)
GO
--通過存儲(chǔ)過程將Excel資料導(dǎo)入到數(shù)據(jù)庫
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'proc_excelInSql' AND type = 'P')
DROP PROCEDURE proc_excelInSql
GO
--接收兩個(gè)參數(shù)
CREATE PROCEDURE proc_excelInSql
@address Varchar(100), --1、文件地址
@name Varchar(30) --2、文件名
AS
DECLARE @STR VARCHAR(8000)
--將整理好的數(shù)據(jù)插入到指定數(shù)據(jù)庫中。
SET @STR='INSERT INTO spg_system.dbo.型體單價(jià)明細(xì)(型體ID,序號(hào),工序名稱,操作機(jī)器,工種,操作時(shí)間,'
SET @STR=@STR+'標(biāo)準(zhǔn)時(shí)間,單價(jià),標(biāo)準(zhǔn)日產(chǎn)能,需求人數(shù),備注,修改者,修改日期)'
--將型體字段為空的替換為檔期型體的型體ID編號(hào),修改者默認(rèn)為"Excel 導(dǎo)入",修改日期默認(rèn)為檔期日期。
SET @STR=@STR+'SELECT ISNULL((SELECT 型體ID FROM SPG_SYSTEM.dbo型體單價(jià) where 型體編號(hào)='''+@name+'''),'
SET @STR=@STR+'0) as 型體ID, 序號(hào),工序名稱,ISNULL(操作機(jī)器,'''') 操作機(jī)器,ISNULL(工種,'''') 工種,'
SET @STR=@STR+'ISNULL(操作時(shí)間,0) 操作時(shí)間,ISNULL(標(biāo)準(zhǔn)時(shí)間,0.0) 標(biāo)準(zhǔn)時(shí)間,單價(jià),ISNULL(標(biāo)準(zhǔn)日產(chǎn)能,0)'
SET @STR=@STR+' 標(biāo)準(zhǔn)日產(chǎn)能,ISNULL(需求人數(shù),0) 需求人數(shù),備注,ISNULL(修改者,''Excel 導(dǎo)入'') 修改者,'
SET @STR=@STR+'ISNULL(修改日期,getDATE()) 修改日期 FROM ('
--增加三個(gè)字段型體ID、修改者和修改日期
SET @STR=@STR+'SELECT null 型體ID, 序號(hào),工序名稱,操作機(jī)器,工種,操作時(shí)間,標(biāo)準(zhǔn)時(shí)間,單價(jià),標(biāo)準(zhǔn)日產(chǎn)能,需求人數(shù),備注,null 修改者,null 修改日期 FROM('
--從Excel讀出數(shù)據(jù),并修改文件名和過濾沒有用的資料行
SET @STR=@STR+'SELECT CAST(F1 AS INT) 序號(hào), F2 工序名稱,F3 操作機(jī)器,F4 工種,F5 操作時(shí)間,CAST(F6 AS DECIMAL(4,1)) 標(biāo)準(zhǔn)時(shí)間,
cast(F7 as decimal(5,3)) 單價(jià),CAST(ROUND(F8,0) AS INT) 標(biāo)準(zhǔn)日產(chǎn)能,CAST(F9 as DECIMAL(4,2)) 需求人數(shù),
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 序號(hào) != 0'
SET @STR=@STR+')BB ORDER BY 序號(hào)'
EXEC (@STR)
GO
--調(diào)用存儲(chǔ)過程的時(shí)候,注意D盤要有相應(yīng)的文件,
exec proc_excelinsql 'D:\184240.xls','184240'
下載184240.xls'文件
如有不明之處請(qǐng)Email:
kunpeng.niu@163.com
posted on 2009-03-10 17:11
Werther 閱讀(1263)
評(píng)論(3) 編輯 收藏 所屬分類:
15.SQL Server