您的位置:首页 > 数据库

SQL 存储过程入门(变量)

2013-04-11 17:09 381 查看

SQL存储过程入门(变量)(二)

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

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

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

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

inti=0;--定义加赋值。

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

看看简单的声明语法:

Declare@Local_Vardata_type


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

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

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

declare@ID=2varchar(20);


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

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


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

一,基本用法



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

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

3
1




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

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



declare@IDvarchar(20)
set@ID=3
print@ID
select@ID=1+@ID--将变量@id加1
print@ID
select@ID=(select1+5)--类似于@ID=1+5
print@ID
select@ID=(select1-@ID)--类似于@ID=1-@ID
print@ID

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

  3
  4
  6
 -5





我们再看看乘除法呢



declare@IDint
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@IDint
set@ID=(10%3)
print@ID
select@ID=(10%2)
print@ID

结果
---------
1
0




二,区别

1,表达式返回多个值时



表达式返回多个值时,使用SET赋值

declare@namevarchar(128)
set@name=(selectusernamefromuserinfo)
print@name
/*
--出错信息为
服务器:消息512,级别16,状态1,行2
子查询返回的值多于一个。当子查询跟随在=、!=、<、<=、>、>=之后,或子查询用作表达式时,这种情况是不允许的。
*/

表达式返回多个值时,使用SELECT赋值
declare@namevarchar(20)
select@name=usernamefromuserinfo
print@name--结果集中最后一个username列的值
结果:
---------
wangwu




2,表达式未返回值时



--表达式未返回值时,使用SET赋值
declare@namevarchar(20)
set@name='jack'
set@name=(selectusernamefromuserinfowhereusername='not')
print@name--Null值

结果
--------

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

结果
-------
jack





这里简单总结下

下表列出SET与SELECT的区别。


条件  setselect
表达式返回多个值出错将返回的最后一个值赋给变量
表达式未返回值变量被赋为null值变量保持原值
下面来看个综合的例子



CREATEPROCEDUREUserLogin1--创建一个存储过程来判断登录
@namevarchar(20),
@passwordvarchar(20),
@inReturnintoutput--输出参数

AS
--这里来定义一个变量来保存密码
Declare@strPwdvarchar(20)
BEGIN

select@strPwd=userPassfromuserinfowhereuserName=@name--通过select给变量@strPwd赋值
if(@password=@strPwd)
begin
set@inReturn=1
--假设来更新个时间
updateuserinfosetregistertime=getdate()whereuserName=@name
end
else
set@inReturn=-1--如果密码不正确,返回-1
END
GO

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


  (1行受影响)
  1


--或这样调用:
declare@testint
EXECUserLogin1@name='admin',@password='admin',@inReturn=@testoutput
print@test

--结果跟上面是一样的

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


declare@testint
EXECUserLogin1@name='admin1',@password='admin',@inReturn=@testoutput
print@test

结果
-------------
-1--这里的值是存储过程中设置的值。如果失败,则返回-1,这就是output的作用。





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

SqlSever

SQL存储过程入门(变量)(二)

摘要:上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。变量分文局部变量和全局变量局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。在c#语言中,定义一个变量很简单,例如inti=0;--定义加赋值。在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量。看看简单的声明语法:Declare@Local_Vardata_type@Local_Var是一个整体,表示一个变量。data_type就是数据类型了,这个大家都很熟悉的,例如int,decimal,float,text等。变量声明了,怎阅读全文

posted@2013-04-1114:08chengdu.jack.li阅读(324)|评论(0)编辑

SQL存储过程入门(基础知识)(一)

摘要:大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧。为了以后发展,决定从零开始学习下。一,基础知识/article/5288155.html二,变量使用/article/5288156.html这里看看存储过程的定义,存储过程(StoredProcedure),是一组为了完成特定功能的SQL语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数阅读全文

posted@2013-04-1111:06chengdu.jack.li阅读(693)|评论(6)编辑

数据库左连接的一点知识

摘要:数据库的做链接我们经常遇到,有一次发现了顺序问题,没有搞明白,现在在回顾总结下。首先创建2张表A,B,然后插入初始化数据。createtableA(idint);createtableB(idint);INSERTINTOAVALUES(1);INSERTINTOAVALUES(2);INSERTINTOAVALUES(3);INSERTINTOBVALUES(1);INSERTINTOBVALUES(2);INSERTINTOBVALUES(3);SELECT*FROMA;SELECT*FROMB;id123id123我们假设命名为阅读全文

posted@2013-04-0914:23chengdu.jack.li阅读(573)|评论(3)编辑

转一个题目涉及到的50个Sql语句(学生成绩)

摘要:网上看到一位大哥总结的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)教师表createtablestudent(s#varchar(30)primarykey,sNamevarchar(30),Sageint,sSexvarchar(10))insertintostudent阅读全文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: