SQL例题:储存过程

第一题:马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?

 1 CREATE PROCEDURE [dbo].[T1]
 2 AS
 3 BEGIN
 4 /*
 5 马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭
 6 共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?
 7 解方程组
 8 编写程序,采用穷举法求出结果。
 9 */
10     DECLARE @M INT = 0,@W INT = 0,@C INT = 0
11     CREATE TABLE #(M INT,W INT,C INT)
12     WHILE @M<=30
13         BEGIN
14             WHILE @W<=30
15                 BEGIN
16                     SET @C = 30 - @M - @W
17                     IF 3 * @M + 2 * @W + @C = 50
18                         BEGIN
19                             INSERT INTO # VALUES (@M,@W,@C)
20                         END
21                     SET @W = @W + 1
22                 END
23             SET @M = @M + 1
24         END
25     SELECT * FROM #
26     DROP TABLE #
27 END
28 GO

第二题:编写程序,根据以下公式求e的值。要求用两种方法计算: 
 1) for循环,计算前50项  
 2)while 循环,直至最后一项的值小于10-4

 1 CREATE FUNCTION [dbo].[求阶乘]
 2 ( @i AS BIGINT
 3 )
 4 RETURNS BIGINT
 5 AS
 6 BEGIN
 7     DECLARE @x BIGINT = 1,@y BIGINT = 1
 8     WHILE @x <= @i
 9         BEGIN
10             SET @y = @y * @x
11             SET @x = @x + 1
12         END
13   RETURN @y
14 END
15 GO

 1 CREATE PROCEDURE [dbo].[T002]
 2   @FF AS bit = 0
 3 AS
 4 BEGIN
 5 /*
 6  编写程序,根据以下公式求e的值。要求用两种方法计算:
 7  1) for循环,计算前50项
 8  2)while 循环,直至最后一项的值小于10-4
 9 PS:SQL SERVER中没有FOR循环,50!会超出BIGINT的范围,算个20意思一下
10 */
11     DECLARE @i tinyint = 1,@x FLOAT = 1.0,@f FLOAT = 1.0
12     IF @FF = 0
13         BEGIN
14             WHILE @i <= 20
15                 BEGIN
16                     SET @f = @f + 1.0 / dbo.[T002.求阶乘](@i)
17                     SET @i = @i + 1
18                 END
19             SELECT @f
20         END
21     ELSE
22         BEGIN
23             WHILE @x >= 0.0001
24                 BEGIN
25                     SET @x = 1.0 / dbo.求阶乘(@i)
26                     SET @f = @f + @x
27                     SET @i = @i + 1
28                 END
29             SELECT @f
30         END
31 END
32 GO

第三题:从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。

 1 CREATE PROCEDURE [dbo].[T3]
 2   @Num AS varchar (200)
 3 AS
 4 BEGIN
 5 /*
 6 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。
 7 */
 8     DECLARE @S CHAR(1) = ‘1‘,@i INT = 1
 9     WHILE @S <> ‘‘
10         BEGIN
11             SET @S = SUBSTRING(@Num, @i, 1)
12             IF @S <> ‘‘
13                 BEGIN
14                     SET @i = @i + 1
15                 END
16         END
17     SELECT @i - 1,LEN(@Num)
18 END
19 GO

时间: 2024-10-30 11:53:28

SQL例题:储存过程的相关文章

[SQL Server]储存过程中使用临时表循环操作数据

本文为原创文章,转载请注明出处!我的博客地址:http://www.cnblogs.com/txwd 由于工作原因,到目前为此已有一年多没有写SQL Server的储存过程了,已有些生疏.日前工作中有个表的数据需要定时更新,翻了一下以前写的储存过程,在此记录一下. 需求是这样的: 有两张表     1.博主表: Blogger ,2.博主对应的文章表: BlogForBlogger 文章表的数据由服务端定时获取,博主表有个字段保存博主文章的总数量,所以这个字段要定时去更新. 实现:创建一个储存过

sql之储存过程与函数的区别

1.创建函数.查找函数 /*创建带参数的函数,返回单个*/ CREATE FUNCTION [dbo].[GETGrade](@userName nvarchar(10),@subject nvarchar(10)) returns nvarchar(10) as begin declare @grade nvarchar(10) if @userName='张三' set @grade=(select [source] from TestRows2Columns where [email pr

SQL Server 储存过程的output 参数

要做的参数的回传一方面要做到有储存过程的配合,再一方面也要有调用方法的配合,也就是说错误的调用方法是没有办法把值回传的. 下面是例子 --1.储存过程方面的配合 create procedure dbo.usp_C @i as int output    ---**注意这里要用output 关键字**--- as begine set @i =100; end; -- 2.调用方面的配合 declare @j as int =1; exec dbo.usp_C @j output ;--**注意

VFP执行 SQL Server 储存过程示例

PUBLIC errvalPUBLIC errmsgPUBLIC handleerrval=0errmsg=' ' *Sql Server 连接参数sourcename= 'test'user= 'sa'passwd='' ******** 连接* 为连接打开错误显示=SQLSetProp(0,"DispWarning",.t.)handle=SQLConnect(sourcename,user,passwd)IF handle > 0WAIT WINDOW '连接成功' NOW

SQL CLR 储存过程与函数

SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数

-- SQL SERVER 判断是否存在某个触发器.储存过程 -- 判断储存过程,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE name='procedurename' AND type='P')) DROP PROCEDURE procedurename -- 判断触发器,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE id=object_id(N'[dbo].[triggername]')

SQL获取所有数据库名、表名、储存过程以及参数列表

SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogin='1'表示帐户islogin='0'表示角色status='2'表示用户帐户status='0'表示糸统帐户2.获取所有数据库名:SELECT Name FROM Master..SysDatabases ORDER BY Name3.获取所有表名SELECT Name FROM Databas

sql储存过程in(多个参数)

首先要创建一个截取字符串的函数 函数SqlitIn的第一个参数是储存过程要in的字符串,第二个参数是分隔符 1 CREATE function [dbo].[SplitIn](@c varchar(100),@split varchar(2)) 2 returns @t table(col varchar(20)) 3 as 4 begin 5 while(charindex(@split,@c)<>0) 6 begin 7 insert @t(col)values (substring(@c

sql 储存过程的使用

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -<span style="background-color: rgb(255, 255, 0);">-获取所有数据 根据自定义函数传人类型id返回类型名称</span> USE [Cloths] GO /****** Object:  StoredProcedure [dbo].[Proc_all]    Script Date: 05/23/2014 12:10:37 ******/ SE

mysql的储存过程

储存过程可以简单理解为一条或多条SQL语句的集合. 储存过程的操作包括创建储存过程,查看储存过程,更新储存过程和删除储存过程. 1. 创建储存过程 1.1 储存过程语法结构 在MySQL中创建存储过程通过SQL语句CREATE PROCEDURE来实现,其语法形式如下: CREATE PROCEDURE procedure_name([procedure_paramter[,…]]) [characteristic…] routine_body procedure_name参数表示所要创建的储存