网站需要一个随机无重复分配论文给不同专家评审的问题,要求每篇论文要有N个专家阅读,但是分配关系不能重复。
刚开始我确实是一点头绪也没有,本来是用C#在事件代码中写,各种循环嵌套,但是第三天早上的时候,突然想到,如果真正测试的时候数据多了,循环这么多层,相乘之后得执行很多次里面的插入存储过程,会很慢很慢,再加上测试点太远,所以果断舍弃这种做法。
然后我又上网各种找,发现游标。
说实话,我是完全0基础开始学习做网站,整套过程都得自学,因为是给老师做项目,学校项目通常都是给研究生做,所以本科生能有这个机会很不容易,我就零基础,硬着头皮上了。
mssql的知识还是不怎么完全,所以把游标研究了一下,然后把在C#中写的逻辑,在sql中重新捋了一遍,写完之后还是各种问题,主要是算法逻辑的问题,后来又改了几天,终于给写出来了。
我其实觉得.net挺强大的,那些控件的可编辑性挺高的,很方便。但是也觉得数据库的算法更NB,只是数据库的变通性不太好。现在应该说是出于纠结状态,我的习惯是把所以的算法都写到数据库,但是.net确实需要好好掌握掌握。
新手一个,还请大哥大师们多指教。
下面附上花了我好几天写出来的这个存储过程的代码:
1 USE [HLJSXKJSYYJSGLPT] 2 GO 3 /****** Object: StoredProcedure [dbo].[LWDelivery] Script Date: 04/24/2012 09:51:54 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 -- ============================================= 9 -- Author:10 -- Create date: 11 -- Description: 12 -- ============================================= 13 ALTER PROCEDURE [dbo].[LWDelivery] 14 @xkdm char(7), 15 @yjsflm char(1), 16 @lwcount char(5), 17 @lwpsbl char(5) 18 19 AS 20 BEGIN 21 SET NOCOUNT ON; 22 23 declare @sql nvarchar(4000) 24 set @sql='declare @j int 25 set @j=0 26 declare @myLWDM char(20) 27 declare @myZJHM char(18) 28 declare @compareLWDM char(20) 29 declare @compareZJHM char(18) 30 if('''+@yjsflm+'''=''1'') 31 begin 32 declare zjhmcursor cursor scroll for select ZJHM from T_DS where XKDM='''+@xkdm+''' and LWPSZJ=''是'' 33 end 34 else 35 begin 36 declare zjhmcursor cursor scroll for select ZJHM from T_DS where XKDM='''+@xkdm+''' and LWPSZJ=''是'' and ZDGX!=''2'' 37 end 38 open zjhmcursor 39 while(@j