SQL 存储过程入门(变量)

摘要:
SQL存储过程(变量)简介(2)在上一篇文章中,我们讨论了SQL存储过程的基本定义,以及如何创建和使用它们。本文将讨论变量的使用。在sql中,定义变量需要关键字DECLARE和特殊符号标记(@)来表示它是一个变量。看看简单的声明语法:Declare@Local_Vardata_type@Local_Var是一个整体,表示一个变量。
SQL 存储过程入门(变量)(二)

上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。

变量分文局部变量和全局变量

局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。

在c# 语言中,定义一个变量很简单,例如

int i=0; --定义加赋值。

在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量。

看看简单的声明语法:

Declare @Local_Var data_type

@Local_Var是一个整体,表示一个变量。

data_type就是数据类型了,这个大家都很熟悉的,例如int,decimal ,float,text等。

变量声明了,怎么赋值呢,能在声明的时候赋值么?像这样

declare @ID=2 varchar(20);


这样是不行的,但是这样呢

declare @ID varchar(20)=2
print @ID  --这句话的意思是在sql server窗口中打印出变量的值
这样是正确的,结果是
---------
2

声明可以赋值,再声明后是可以再赋值的,
这里有两种方式赋值
set,select ,先看基本用法,再说区别

一,基本用法

    

复制代码
declare @ID varchar(20)      --定义一个变量叫@ID
set @ID=3                    --变量赋值为3
print @ID                    --打印  
select @ID=1                 --变量赋值为1
print @ID                    --打印

查看结果
-------------

3
1

复制代码

从上面看出来了,Set,与select都可以给变量赋值。

然后我们看看变量的运算,运算其实很简单,下面看看加减法

复制代码
declare @ID varchar(20)
set @ID=3
print @ID
select @ID=1+@ID       --将变量@id加1
print @ID
select @ID=(select 1+5)  --类似于@ID=1+5
print @ID
select @ID=(select 1-@ID)  --类似于@ID=1-@ID
print @ID

结果
-----------

  3
  4
  6
  -5

 
复制代码

我们再看看乘除法呢

复制代码
declare @ID int
set @ID=3
print @ID
select @ID=2* @ID   --乘以2
print @ID
select @ID=(@ID/2)   --除以2
print @ID
select @ID=(@ID * @ID) --乘方
print @ID

结果
-----------

  3
  6
  3
  9

 
复制代码

最后看一下模运算%

复制代码
declare @ID int
set @ID=(10%3)
print @ID
select @ID=(10%2)
print @ID

结果
---------
1
0
复制代码

二,区别

1,表达式返回多个值时

复制代码
表达式返回多个值时,使用 SET 赋值

declare @name varchar(128)
set @name=(select username from userinfo)
print @name
/* --出错信息为 服务器: 消息 512,级别 16,状态 1,行 2 子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。 */ 表达式返回多个值时,使用 SELECT 赋值 declare @name varchar(20) select @name= username from userinfo print @name --结果集中最后一个 username 列的值 结果: --------- wangwu
复制代码

2,表达式未返回值时

复制代码
--表达式未返回值时,使用 SET 赋值
declare @name varchar(20)
set @name='jack'
set @name= (select username from userinfo where username='not')
print @name  --Null值

结果
--------

--表达式未返回值时,使用 SELECT 赋值
declare @name varchar(20)
set @name='jack'
select @name=username from userinfo where username='not'
print @name  --jack,保存原来的值

结果
-------
jack

复制代码
这里简单总结下

下表列出 SET 与 SELECT 的区别。

条件  set select 
表达式返回多个值出错将返回的最后一个值赋给变量
表达式未返回值变量被赋为null值变量保持原值

下面来看个综合的例子

复制代码
CREATE PROCEDURE UserLogin1   --创建一个存储过程来判断登录
@name varchar(20),
@password varchar(20),
@inReturn int output          --输出参数

AS
--这里来定义一个变量来保存密码
Declare @strPwd varchar(20)  
BEGIN
    
    select @strPwd=userPass from userinfo where userName=@name  --通过select 给变量@strPwd赋值
    if(@password=@strPwd)
        begin
            set @inReturn=1
             --假设来更新个时间
             update userinfo set registertime=getdate() where userName=@name
         end
    else
    set @inReturn=-1   --如果密码不正确,返回-1
END
GO

--测试方法 declare @test
int exec UserLogin1 'admin','admin',@test output --这里如果没有output关键字,则@test的值为NULL print @test
结果:
-------------


  (1 行受影响)
  1


--或这样调用: declare @test int EXEC UserLogin1 @name='admin',@password='admin',@inReturn=@test output print @test

--结果跟上面是一样的


--如果我们登录不正确,像这样

declare @test int
EXEC UserLogin1 @name='admin1',@password='admin',@inReturn=@test output
print @test     
结果
-------------
-1 --这里的值是存储过程中设置的值。如果失败,则返回-1,这就是output的作用。

复制代码

未完待续..........

SqlSever
 
摘要: 上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。变量分文局部变量和全局变量局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。在c# 语言中,定义一个变量很简单,例如int i=0; --定义加赋值。在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量。看看简单的声明语法:Declare @Local_Var data_type@Local_Var是一个整体,表示一个变量。data_type就是数据类型了,这个大家都很熟悉的,例如int,decimal ,float,text等。变量声明了,怎阅读全文
posted @ 2013-04-11 14:08 chengdu.jack.li 阅读(324) | 评论 (0) 编辑
 
摘要: 大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧。为了以后发展,决定从零开始学习下。一,基础知识 http://www.cnblogs.com/lideng/archive/2013/04/11/3013966.html二,变量使用 http://www.cnblogs.com/lideng/archive/2013/04/11/3014407.html这里看看存储过程的定义,存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数阅读全文
posted @ 2013-04-11 11:06 chengdu.jack.li 阅读(693) | 评论 (6) 编辑
 
摘要: 数据库的做链接我们经常遇到,有一次发现了顺序问题,没有搞明白,现在在回顾总结下。首先创建2张表A,B,然后插入初始化数据。create table A(id int);create table B(id int);INSERT INTO A VALUES(1);INSERT INTO A VALUES(2);INSERT INTO A VALUES(3);INSERT INTO B VALUES(1);INSERT INTO B VALUES(2);INSERT INTO B VALUES(3);SELECT * FROM A;SELECT * FROM B;id123id123我们假设命名为阅读全文
posted @ 2013-04-09 14:23 chengdu.jack.li 阅读(573) | 评论 (3) 编辑
 
摘要: 网上看到一位大哥总结的sql,转过来学习//原文出处 http://blog.csdn.net/liumrzy/article/details/4289438一个题目涉及到的50个Sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表create table student(s# varchar(30) primary key,sName varchar(30),Sage int,sSex varchar(10))insert into student阅读全文
共同学习,共同进步!
 
分类: SqlSever
标签: sql 变量

免责声明:文章转载自《SQL 存储过程入门(变量)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android浮动搜索框Qt4.8.6与VS2008的集成开发环境的安装配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MFC获取文本框字符串

//方法1:使用用GetDlgItem,得到控件对像, 再GetWindowText //GetDlgItem(IDC_EDIT1)->GetWindowText() //方法2:控件与对应类关联如:Edit Control拖放到面板上, 然后在上面右击添加变量, 选择控件变量 CEdit, //以后可以使用这个CEDit的...

es6 解构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 关于给变量赋值,传统的变量赋值是这样的: var arr = [1,2,3];//把数组的值分别赋给下面的变量; var a = arr[0]; var b = arr[1]; var c = arr[2];...

MySQL 行锁 表锁机制

MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑。遇到了可别乱踩。通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项。还在等啥?经验等你来拿! MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行...

.Net程序员学用Oracle系列(9):系统函数(上)

1、字符函数 1.1、字符函数简介 1.2、语法说明及案例 2、数字函数 2.1、数字函数简介 2.2、语法说明及案例 3、日期函数 3.1、日期函数简介 3.2、语法说明及案例 3.3、日期函数补充 4、总结 Oracle 中系统函数特别多,有好几百个,其中大部分函数对开发者而言,似乎永远都用不到,本文将要介绍 Ora...

MySQL快速回顾:计算字段与函数

9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式。比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中。 城市、州和邮政编码存储在不同的列中,但邮件标签打印程序却需要把它们作为一个恰当格式的字段检索出来。 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。 在上面举的例子中,存储...

吉特仓库管理系统-ORM框架的使用

最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一个做的ORM是相当的不错的,第二个也是相当的不错, 至少在表面上看起来是这么一回事。至于具体的用法和实践我没有深入的去测试过,所以也不便发表更多的意见,不过这...