手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >关于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 --打印

查看结果

-------------

从上面看出来了,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,表达式返回多个值时

复制代码 代码如下:

表达式返回多个值时,使用 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的作用。

【关于SQL 存储过程入门基础(变量)】相关文章:

SQL SERVER存储过程的使用

SQL Server 存储过程解析

在SQLServer 2005中编写存储过程

SQL Server存储过程的基础说明

SQL Server扩展存储过程实现远程备份与恢复

MSSQL存储过程解秘过程全析

SQL SERVER数据库开发之存储过程应用

分页 SQLServer存储过程

分页的存储过程

分页存储过程代码

精品推荐
分类导航