读书人

初学者跪求存储过程编程实例

发布时间: 2012-04-18 15:01:59 作者: rapoo

菜鸟跪求存储过程编程实例
想把一些逻辑运算方法放到存储过程中去运算。

但是完全就对存储过程编程没有概念

比如:
怎么定义变量。

怎么完成变量之间的计算。

计算的运算符是什么?

给我一些教程看一看?

网络上的教程都是很基础的,仅仅是完成一个SELECT。或者返回一个SELECT。

我希望各位高手能够介绍一个包含运算,定义变量,循环的存储过程教程或者案例给我看已下。

[解决办法]

SQL code
CREATE PROC testasbegindeclare @i smallint,@j smallint,@t smallint,@str varchar(100)set @i=1set @j=1set @str=''while @i<=9  begin     while @j<=@i       begin         set @t=@i*@j         set @str=@str+cast(@j as char(2))+'*'+cast(@i as char(2))+'='+cast(@t as char(5))          set @j=@j+1       end    print @str    set @i=@i+1    set @j=1    set @str=''  endendexec test/*1 *1 =1    1 *2 =2    2 *2 =4    1 *3 =3    2 *3 =6    3 *3 =9    1 *4 =4    2 *4 =8    3 *4 =12   4 *4 =16   1 *5 =5    2 *5 =10   3 *5 =15   4 *5 =20   5 *5 =25   1 *6 =6    2 *6 =12   3 *6 =18   4 *6 =24   5 *6 =30   6 *6 =36   1 *7 =7    2 *7 =14   3 *7 =21   4 *7 =28   5 *7 =35   6 *7 =42   7 *7 =49   1 *8 =8    2 *8 =16   3 *8 =24   4 *8 =32   5 *8 =40   6 *8 =48   7 *8 =56   8 *8 =64   1 *9 =9    2 *9 =18   3 *9 =27   4 *9 =36   5 *9 =45   6 *9 =54   7 *9 =63   8 *9 =72   9 *9 =81   */
[解决办法]
SQL code
SELECT     CAST(CASE WHEN 1 <= number THEN RTRIM(number) + ' * 1 = ' + RTRIM(number) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 2 <= number THEN RTRIM(number) + ' * 2 = ' + RTRIM(number*2) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 3 <= number THEN RTRIM(number) + ' * 3 = ' + RTRIM(number*3) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 4 <= number THEN RTRIM(number) + ' * 4 = ' + RTRIM(number*4) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 5 <= number THEN RTRIM(number) + ' * 5 = ' + RTRIM(number*5) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 6 <= number THEN RTRIM(number) + ' * 6 = ' + RTRIM(number*6) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 7 <= number THEN RTRIM(number) + ' * 7 = ' + RTRIM(number*7) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 8 <= number THEN RTRIM(number) + ' * 8 = ' + RTRIM(number*8) ELSE '' END AS varchar(20)),    CAST(CASE WHEN 9 <= number THEN RTRIM(number) + ' * 9 = ' + RTRIM(number*9) ELSE '' END AS varchar(20))FROM (    SELECT number = 1 UNION ALL SELECT 2 UNION ALL     SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5    UNION ALL SELECT 6 UNION ALL SELECT 7     UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS A/*-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------1 * 1 = 1                                                                                                                                                               2 * 1 = 2            2 * 2 = 4                                                                                                                                          3 * 1 = 3            3 * 2 = 6            3 * 3 = 9                                                                                                                     4 * 1 = 4            4 * 2 = 8            4 * 3 = 12           4 * 4 = 16                                                                                               5 * 1 = 5            5 * 2 = 10           5 * 3 = 15           5 * 4 = 20           5 * 5 = 25                                                                          6 * 1 = 6            6 * 2 = 12           6 * 3 = 18           6 * 4 = 24           6 * 5 = 30           6 * 6 = 36                                                     7 * 1 = 7            7 * 2 = 14           7 * 3 = 21           7 * 4 = 28           7 * 5 = 35           7 * 6 = 42           7 * 7 = 49                                8 * 1 = 8            8 * 2 = 16           8 * 3 = 24           8 * 4 = 32           8 * 5 = 40           8 * 6 = 48           8 * 7 = 56           8 * 8 = 64           9 * 1 = 9            9 * 2 = 18           9 * 3 = 27           9 * 4 = 36           9 * 5 = 45           9 * 6 = 54           9 * 7 = 63           9 * 8 = 72           9 * 9 = 81(9 行受影响)*/ 


[解决办法]

探讨
引用:
sql和其它编程语言一样有循环,break,continue语句,但搞算法很吃力


请问如何循环获取SELECT符合条件的数据。然后一个个遍历通过循环相加或操作呢?

[解决办法]
和一般的编程语言差不多了。因为是数据库,所以处理数据能力很强。
一个参考
SQL code
--创建存储过程CREATE PROCEDURE [dbo].[sp_JimProc_GetAllChildID]--获得一个部门下所有子部门的ID,无论有多少级@ParentID INT,@ChildIDStr VARCHAR(500) OUTPUTASSET @ChildIDStr=''IF @ParentID IS NULL RETURNDECLARE @OldRecordCnt INTDECLARE @CurRecordCnt INTDECLARE @tmp table ([DepartmentID] INT PRIMARY KEY NOT NULL)INSERT INTO @tmp VALUES(@ParentID)SET @OldRecordCnt=1WHILE 1=1BEGIN    INSERT INTO @tmp SELECT a.[DepartmentID] FROM Admin_Department a INNER JOIN @tmp b ON a.[ParentID]=b.[DepartmentID]     WHERE a.[DepartmentID] NOT IN (SELECT [DepartmentID] FROM @tmp)    SELECT @CurRecordCnt=COUNT(*) FROM @tmp    IF @CurRecordCnt=@OldRecordCnt         BREAK    ELSE        SET @OldRecordCnt=@CurRecordCntENDDELETE FROM @tmp WHERE [DepartmentID]=@ParentIDSELECT @ChildIDStr=@ChildIDStr++CAST(DepartmentID AS VARCHAR(4))+',' FROM @tmpIF @ChildIDStr<>''     SET @ChildIDStr=LEFT(@ChildIDStr,LEN(@ChildIDStr)-1) 

读书人网 >SQL Server

热点推荐