【文章內(nèi)容簡(jiǎn)介】
S DECLARE @課題編號(hào) char(10) //課題和立項(xiàng) 表主鍵 DECLARE @課題性質(zhì) char(10) SET @課題性質(zhì) =(SELECT 課題性質(zhì) FROM INSERTED) //在系統(tǒng)表 INSERTED中選出課題性質(zhì) IF @課題性質(zhì) =39。自然科學(xué) 39。 //根據(jù)課題性質(zhì)得到課題立項(xiàng)總得分 BEGIN UPDATE 課題和立項(xiàng) //更新課題和立項(xiàng)表 SET 課題立項(xiàng)總得分 =39。10039。 END ELSE IF @課題性質(zhì) =39。軟科學(xué) 39。 BEGIN UPDATE 課題和立項(xiàng) SET 課題立項(xiàng)總得分 =39。9039。 END ELSE IF @課題性質(zhì) =39。社會(huì)科學(xué) 39。 BEGIN UPDATE 課題和立項(xiàng) SET 課題立項(xiàng)總得分 =39。8039。 END 存儲(chǔ)過程 ( 1)撰寫論文存儲(chǔ)過程 CREATE procedure 撰寫論文 @員工編號(hào) int //定義標(biāo)量變量 as begin declare @論文得分 int //聲明各個(gè)變量及類型 declare @論文參加人數(shù) int declare @論文個(gè)人得分 int declare @刊物級(jí)別 char(50) declare @論文分工 char(50) declare @姓名 char(50) declare @論文編號(hào) int 12 select @刊物級(jí)別 =刊物級(jí)別 from 論文 a,撰寫 b where =@員工編號(hào) and 編號(hào) = select @論文分工 =論文分工 from 撰寫 a where =@員工編號(hào) select @論文參加人數(shù) =count(論文編號(hào) ) from 撰寫 where 論文編號(hào) =(select 論文編號(hào) from 撰寫 where 員工編號(hào) =@員工編號(hào) ) select @姓名 =姓名 from 教職員工 a,撰寫 b where =@員工編號(hào) and = //選擇出各個(gè)變量并根據(jù)標(biāo)量變量連接設(shè)置值 begin if @刊物級(jí)別 =39。核心期刊 39。 set @論文得分 =100 else if @刊物級(jí)別 =39。一般期刊 39。 set @論文得分 =90 else if @刊物級(jí)別 =39。報(bào)紙雜志 39。 set @論文得分 =80 else if @刊物級(jí)別 =39。會(huì)議論文 39。 set @論文得分 =70 begin if @論文分工 =39。主持人 39。 set @論文個(gè)人得分 =@論文得分 * else if @論文分工 =39。參加人 39。 set @論文個(gè)人得分 =(@論文得分 *) else if @論文分工 =39。參加人 39。 set @論文個(gè)人得分 =(@論文得分 *) end end end begin print 39。員工編號(hào): 39。+str(@員工編號(hào) )+39。姓名: 39。+@姓名 +39。論文個(gè)人得分為: 39。+str(@論文個(gè)人得分 ,5,1) //輸出結(jié)果 end ( 2)發(fā)表著作存儲(chǔ)過程 CREATE procedure 發(fā)表著作 @員工編號(hào) int //定義標(biāo)量變量 as begin declare @著作得分 int //聲明各個(gè)變量及類型 declare @著作分工 char(10) declare @著作個(gè)人得分 int declare @著作類別 char(10) declare @姓名 char(50) set @著作類別 =(select top 1 著作類別 from 著作 a,發(fā)表 b where = and =@員工編號(hào) ) set @著作分工 =(select top 1 著作分工 from 發(fā)表 a where =@員工編號(hào) ) set @姓名 =(select top 1 姓名 from 教職員工 a where =@員工編號(hào) ) begin //選擇出各個(gè)變量并根據(jù)標(biāo)量變量連接設(shè)置值 if @著作類別 =39。專著 39。 set @著作得分 =100 else if @著作類別 =39。編著 39。 set @著作得分 =90 else if @著作類別 =39。教材 39。 13 set @著作得分 =80 else set @著作得分 =70 begin if @著作分工 =39。主持人 39。 set @著作個(gè)人得分 =@著作得分 * else if @著作分工 =39。參加人 39。 set @著作個(gè)人得分 =(@著作得分 *) else if @著作分工 =39。參加人 39。 set @著作個(gè)人得分 =(@著作得分 *) end end end begin select result= 39。員工編號(hào) 39。+str(@員工 編號(hào) )+39。姓名 39。+@姓名 +39。著作分工是 39。+@著作分工 +39。著作得分為: 39。+str(@著作個(gè)人得分 ,5,1) end //輸出結(jié)果 ( 3)發(fā)明專利存儲(chǔ)過程 CREATE procedure 發(fā)明專利 @員工編號(hào) int //定義標(biāo)量變量 as begin declare @專利個(gè)人得分 int //聲明各個(gè)變量及類型 declare @專利得分 int declare @專利類型 char(50) declare @專利分工 char(50) declare @專利參加人數(shù) int declare @姓名 char(50) set @專利類型 =(select top 1 專利類型 from 專利 a,發(fā)明 b where =@員工編號(hào) and = ) set @專利分工 =(select top 1 專利分工 from 專利 a,發(fā)明 b where =@員工編號(hào) and = ) set @專利參加人數(shù) =(select top 1 count(專利編號(hào) ) from 發(fā)明 a where 專利編號(hào) in (select 專利編號(hào) from 發(fā)明 b where 員工編號(hào) =@員工編號(hào) )) set @姓名 =(select top 1 from 教職員工 a,專利 b,發(fā)明 c where =工編號(hào) and = and =@員工編號(hào) ) begin //選擇出各個(gè)變量并根據(jù)標(biāo)量 變量連接設(shè)置值 if @專利類型 =39。發(fā)明 39。 set @專利得分 =100 else if @專利類型 =39。實(shí)用新型 39。 set @專利得分 =90 else set @專利得分 =80 begin if @專利分工 =39。主持人 39。 set @專利個(gè)人得分 =@專利得分 * else set @專利個(gè)人得分 =@專利得分 * 14 end end select result= 39。員工編號(hào): 39。+str(@員工編號(hào) )+39。姓名: 39。+@姓名 +39。專利分工 39。+@專利分工 +39。專利個(gè)人得分為: 39。+str(@專利個(gè)人得分 ,5,1) end //輸出結(jié)果 數(shù)據(jù)庫系統(tǒng) 調(diào)試情況 調(diào)試存儲(chǔ)過程遇到的問題 以 撰寫論文 為例 消息 512,級(jí)別 16,狀態(tài) 1,過程 p_scoreconvert1,第 11 行 子查詢返回的值不止一個(gè)。當(dāng)子查詢跟隨在 =、 !=、 、 =、 、 = 之后,或子查詢用作表達(dá)式時(shí),這種情況是不允許的。 由于 源代碼中 select 論文分工 from 撰寫 a where =@員工編號(hào) ) 這里面返回了不止一個(gè)值 ,而代碼中用 一個(gè)變量 =一個(gè)結(jié)果集了,所以出錯(cuò)了 。