源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于SQL 存储过程入门基础(变量)

  • 时间:2020-04-01 23:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于SQL 存储过程入门基础(变量)
上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。 在c# 语言中,定义一个变量很简单,例如
[u]复制代码[/u] 代码如下:
int i=0; --定义加赋值。
在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量。 看看简单的声明语法:
[u]复制代码[/u] 代码如下:
Declare @Local_Var data_type
@Local_Var是一个整体,表示一个变量。 data_type就是数据类型了,这个大家都很熟悉的,例如int,decimal ,float,text等。 变量声明了,怎么赋值呢,能在声明的时候赋值么?像这样
[u]复制代码[/u] 代码如下:
declare @ID=2 varchar(20);
这样是不行的,但是这样呢
[u]复制代码[/u] 代码如下:
declare @ID varchar(20)=2 print @ID  --这句话的意思是在sql server窗口中打印出变量的值 这样是正确的,结果是 --------- 2
声明可以赋值,再声明后是可以再赋值的, 这里有两种方式赋值 set,select ,先看基本用法,再说区别 [b]一,基本用法[/b]
[u]复制代码[/u] 代码如下:
declare @ID varchar(20)      --定义一个变量叫@ID set @ID=3                    --变量赋值为3 print @ID                    --打印  select @ID=1                 --变量赋值为1 print @ID                    --打印 查看结果 -------------   
    从上面看出来了,Set,与select都可以给变量赋值。 然后我们看看变量的运算,运算其实很简单,下面看看加减法
[u]复制代码[/u] 代码如下:
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
我们再看看乘除法呢
[u]复制代码[/u] 代码如下:
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
最后看一下模运算%
[u]复制代码[/u] 代码如下:
declare @ID int set @ID=(10%3) print @ID select @ID=(10%2) print @ID 结果 ---------
[b]二,区别[/b] 1,表达式返回多个值时
[u]复制代码[/u] 代码如下:
表达式返回多个值时,使用 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,表达式未返回值时
[u]复制代码[/u] 代码如下:
--表达式未返回值时,使用 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值 变量保持原值
下面来看个综合的例子
[u]复制代码[/u] 代码如下:
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的作用。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部