`

sql 存储过程 几个 简单例子

    博客分类:
  • sql
阅读更多

例1:

create proc proc_stu
@sname varchar(20),
@pwd varchar(20)
as
select * from ren where sname=@sname and pwd=@pwd
go

查看结果:proc_stu 'admin','admin'


例2:

下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1.

CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS

IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1
ELSE
SELECT @LEGAL = 0

在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。


例3:一个高效的数据分页的存储过程 可以轻松应付百万数据

 

CREATE PROCEDURE pageTest --用于翻页的测试
--需要把排序字段放在第一列

(
@FirstID nvarchar(20)=null, --当前页面里的第一条记录的排序字段的值
@LastID nvarchar(20)=null, --当前页面里的最后一条记录的排序字段的值
@isNext bit=null,    --true 1 :下一页;false 0:上一页
@allCount int output,   --返回总记录数
@pageSize int output,   --返回一页的记录数
@CurPage int     --页号(第几页)0:第一页;-1最后一页。
)

AS

if @CurPage=0--表示第一页
begin
--统计总记录数
select @allCount=count(ProductId) from Product_test
  
set @pageSize=10
--返回第一页的数据
select top 10
   ProductId,
   ProductName,
   Introduction  
   from Product_test order by ProductId
end

else if @CurPage=-1--表示最后一页

select * from
(select top 10 ProductId,
   ProductName,
   Introduction

from Product_test order by ProductId desc ) as aa
order by ProductId
else

begin
if @isNext=1
   --翻到下一页
   select top 10 ProductId,
   ProductName,
   Introduction
from Product_test where ProductId > @LastID order by ProductId
  
  
else
   --翻到上一页
   select * from
    (select top 10 ProductId,
   ProductName,
   Introduction
from Product_test where ProductId < @FirstID order by ProductId desc) as bb order by ProductId
end

 

 

例4. 一个SQL语句把两个查询结果union叠加起来

举例如下:
drop table test1;
drop table test2;
create table test1 (a char(4),c char(4));
create table test2 (a char(4),c char(4));

insert into test1 values('aaa','bbb')
insert into test1 values('aaa','aaa')
insert into test2 values('ccc','aaa')
insert into test2 values('aaa','aaa')


select 1 as b,* from test1 where a like 'aaa'
union select 2 as b,* from test2 where c like 'aaa'
order by b
这个就是你那条语句,返回结果为
1 aaa aaa
1 aaa bbb
2 aaa aaa
2 ccc aaa
1,2表示查询出来的记录来源于那一个表格

先在去除重复的范围内选取,举例如下:
select 1 as b,* from test1 where a like 'aaa'
union select 2 as b,* from test2 where c like 'aaa' and (a+c) not in (select a+c from test1)
order by b
返回结果:
1 aaa aaa
1 aaa bbb
2 ccc aaa

具体怎么改你的语句,根据实际情况来。我这个例子简单,就是用(a+c) not in (select a+c from test1)说明一下去除重复的范围。

例5. sql server 中 case    when    then   else   end 的用法(条件判断语法)

 

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE

子句中使用 CASE。

首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

SELECT =
CASE
WHEN THEN
WHEN
THEN
ELSE
END

在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

USE pubs
GO
SELECT
Title,
'Price Range' =
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
FROM titles
ORDER BY price
GO

对于informix不能用以上形式,可以如下:
USE pubs
GO
SELECT
Title,
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
Price Range
FROM titles
ORDER BY price
GO


这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*)
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
GO

你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:

USE pubs
GO
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
Title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
GO

对于informix中形式有所不同,例子
select
case when td_acc1_no[1,3]='610' then get_contrast(td_acc1_no)
                 else get_contrast(td_td_acct_no)
                 end sx_acct_no
,               sum(td_actu_amt) sx_bal
from dcc_tdacnacn where td_td_acct_no in ('6107111001014107111000050182',
'6107111001014107111000050168')
group by   1


注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。

除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

 

6.同时更新多条记录  (case语法)

drop table   T_ABCItem
create table T_ABCItem(F_AutoID   int,   F_Name   varchar(20))
insert into  T_ABCItem(F_AutoID,F_Name)values(1,'')
insert into  T_ABCItem(F_AutoID,F_Name)values(2,'')
insert into  T_ABCItem(F_AutoID,F_Name)values(3,'')
UPDATE T_ABCItem SET F_Name=(case F_AutoID when 1 then '值1' when 2 then '值2' when 3 then '值3' end)

 7.SQL Server 从N条记录开始的M条记录语句

 

1.   select top 6 * from KH_Customer WHERE ID NOT IN(SELECT TOP 4 ID FROM KH_Customer)

2. select top 6 *
from KH_Customer
where id> (select max(id) from (select top 4 id from KH_Customer order by id) a)
order by id

 

两条sql语句都是实现查询从第5条到第10条的记录

但据说 第二条 比较快一点,比如表中有300多万条记录,使用第1条语句执行时间需要9秒多,而用第2条语句3秒多

 

8.--------------

-- ======================================================
--列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息
--在查询分析器里运行即可,可以生成一个表,导出到EXCEL中
-- ======================================================

SELECT
       (case when a.colorder=1 then d.name else '' end)表名,
       a.colorder 字段序号,
       a.name 字段名,
       (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
       (case when (SELECT count(*)
       FROM sysobjects
       WHERE (name in
                 (SELECT name
                FROM sysindexes
                WHERE (id = a.id) AND (indid in
                          (SELECT indid
                         FROM sysindexkeys
                         WHERE (id = a.id) AND (colid in
                                   (SELECT colid
                                  FROM syscolumns
                                  WHERE (id = a.id) AND (name = a.name))))))) AND
              (xtype = 'PK'))>0 then '√' else '' end) 主键,
       b.name 类型,
       a.length 占用字节数,
       COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,
       isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,
       (case when a.isnullable=1 then '√'else '' end) 允许空,
       isnull(e.text,'') 默认值,
       isnull(g.[value],'') AS 字段说明   
FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by a.id,a.colorder

 

分享到:
评论

相关推荐

    sql存储过程几个简单例子

    在第一个例子中,展示了如何创建一个简单的存储过程`proc_stu`,用于查询名为ren表中的数据。存储过程接受两个输入参数`sname`和`pwd`,然后根据这些参数查询匹配的记录。使用`CREATE PROC`语句定义存储过程,`AS`...

    SQL存储过程实例.doc

    SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被命名并保存,然后在需要的时候调用,极大地提高了SQL代码的重用性和执行效率。在这个实例中,我们看到一个名为`Sum_wage`的存储过程,它的...

    学习sql存储过程的心得

    在SQL存储过程中,有以下几个重要的知识点: 1. **定义与创建**:存储过程可以通过`CREATE PROCEDURE`语句来创建,用户可以指定输入参数、输出参数或两者皆有,以满足不同的调用需求。例如: ```sql CREATE ...

    原创sql存储过程函数范例

    原创sql存储过程函数范例,一是为了自己方便查找,今天到公司因为没有我保存的一些范例,一个简单的例子写了半个小时,如果有范例直接套几分钟肯定搞定,所以索性上传到CSDN上,何时何地都能找到我的范例了。...

    sql存储过程PPT

    这个例子中,存储过程sp_Sum接收两个输入参数(@Num1和@Num2),计算它们的和,并将结果赋值给输出参数@Result。 系统存储过程如sp_databases、sp_helpdb、sp_renamedb等是SQL Server预先定义的,用于执行特定...

    VB SQL存储过程实例

    ### VB SQL存储过程实例解析与应用 在信息技术领域,尤其是软件开发中,集成数据库操作是常见且关键的需求之一。Visual Basic(简称VB)作为一种广泛使用的编程语言,提供了强大的功能来处理数据库事务,其中就包括...

    sql试题及答案,sql 行列转换,sql存储过程实例

    SQL试题通常涵盖以下几个方面: 1. **基本操作**:包括创建数据库和表,插入数据,查询单个或多个字段,以及更新和删除记录。 2. **选择(SELECT)语句**:学习如何使用WHERE子句筛选数据,使用GROUP BY进行分组,...

    pl sql批量执行多个sql文件和存储过程

    在实际操作过程中,还需要注意以下几个方面: 1. **权限问题**:确保执行脚本的用户拥有足够的权限,特别是当涉及到表、视图、存储过程等数据库对象的操作时。 2. **错误处理**:考虑加入异常处理机制,以便在某个...

    sqlserver的存储过程与 where in 多值参数

    本文将探讨在SQL Server中,存储过程与`WHERE IN`子句结合使用时,处理多值参数的几种方法。 **方法一:拼接SQL字符串并调用`EXEC`** 这是最简单也是最直观的方法。你可以在存储过程中接收一个包含多个值的参数,...

    SQLServer存储过程中事务的使用方法

    在SQL Server存储过程中使用事务通常包含以下几个步骤: 1. **开启事务**:使用`BEGIN TRANSACTION`语句开启一个事务。这标志着事务的开始,所有的SQL操作将在同一个事务中执行,直到事务被提交或回滚。 ```sql ...

    SQL存储过程,触发器讲解及过程中要注意的内容

    SQL存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。本文将深入探讨这两个概念,以及在使用它们时需要注意的关键点。 首先,让我们了解一下SQL存储过程。存储...

    SQL创建存储过程的小例子

    在SQL中,创建一个存储代码(存储过程)通常涉及到以下几个步骤: 确定存储过程的目的:首先,你需要明确你想要存储过程完成什么功能。 编写存储过程的SQL语句:根据你的需求,编写相应的SQL语句。存储过程可以...

    SQLServer存储过程在系统开发中的应用

    在 PowerBuilder 中调用 SQL Server 的存储过程主要涉及以下几个步骤: 1. **建立数据库连接**:首先需要配置与 SQL Server 数据库的连接。 2. **创建数据窗口对象**:通过数据窗口对象可以调用存储过程并处理返回...

    sql存储过程的使用

    本文通过一个简单的例子介绍了SQL存储过程的基本概念和使用方法。存储过程作为一种强大的数据库对象,在实际开发中具有广泛的应用价值。希望本篇文章能帮助大家更好地理解和应用存储过程,从而提高数据库应用程序的...

    sql编程的几个实例

    以下是一些基于描述中提到的"sql编程的几个实例"所涵盖的关键知识点: 1. **查询操作**:SQL的核心功能之一就是查询数据。`SELECT`语句用于从一个或多个表中获取数据。例如,`SELECT * FROM Customers`会返回...

    SqlServer存储过程游标

    在这个存储过程中,我们定义了几个局部变量来帮助执行查询和更新操作: - `@uid`:用于存储用户的ID。 - `@tid`:用于存储主题的ID。 - `@replies`:用于计算每个主题下的回复数量。 - `@temp`:虽然在本例中未使用...

    SQL存储过程实例

    这是关于SQL存储过程的一些资料,里面有几个例子,希望对各位有用,本人急需积分下载一些材料,麻烦帮个忙

    SQL储存过程等的解密,破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器

    解密SQL Server 2000中的加密对象通常涉及以下几个步骤: 1. **获取加密信息**:使用`sys.certificates`和`sys.asymmetric_keys`系统视图来查找用于加密的证书或非对称密钥。这些信息对于后续的解密过程至关重要。 ...

    存储过程从入门到熟练(多个存储过程完整实例及调用方法)

    在学习存储过程的过程中,你需要理解以下几个关键点: 1. 创建存储过程:使用CREATE PROCEDURE语句,指定存储过程的名称、输入/输出参数,以及包含的SQL语句。 2. 调用存储过程:通过EXEC或EXECUTE关键字,或者在...

Global site tag (gtag.js) - Google Analytics