好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SQL 存储过程入门(变量)

SQL 存储过程入门(变量)

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

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

我们再看看乘除法呢

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

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

最后看一下模运算%

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
结果:
-------------

-- 或这样调用: 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 存储过程入门(变量)(二)

摘要: 上一篇我们讲到了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)   编辑

 

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

摘要: 大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧。为了以后发展,决定从零开始学习下。一,基础知识 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)   编辑

 

转 一个题目涉及到的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) 教师表create table student(s# varchar(30) primary key,sName varchar(30),Sage int,sSex varchar(10))insert into student 阅读全文

共同学习,共同进步!

 

分类:  SqlSever

标签:  sql 变量

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于SQL 存储过程入门(变量)的详细内容...

  阅读:42次