本文面向对SQL SERVER中变量操作不熟悉的用户,希望能使他们在看完本文后能对变量操作有具体和全面的认识。

 

在学习SQL SERVER的过程中,很多时候需要对某些单独的值进行调试,这时就需要在SQL SERVER中对变量进行操作。

变量能进行的操作分定义、赋值、使用三种,下面以一段简短的代码作为示例:

--定义一个名称为@I的变量,指定其类型为整数

DECLARE
@I
INT

--对变量@I赋值为

SET
@I=3

--输出@I的值

SELECT
@I

这就是一个最简单的变量操作,包含上述全部三种类型。但变量能进行的操作远不止于此,下面分别进行描述:

变量声明:

变量声明的第一部分为关键字DECLARE,写在最前面。

变量声明的第二部分为变量名称,必须以@开头,后面可以跟字母、数字、中文和非系统运算符的字符,如@、$、_等。

变量声明的第三部分为变量类型,可以定义SQL SERVER中的所有常规类型,包括各种数字类型、字符串类型、时间类型等,只有极少数特殊数据类型无法在变量中定义。

 

·变量的三个部分用分隔符分开,分隔符可以由多个空格、TAB制表符、换行符组成。

·变量名称的大小写不区分,@A和@a指向同一个变量,不能重复定义。关键字和数据类型也是大小定不区分,含义相同。

·多个变量同时定义用逗号分隔多个变量名称和类型。如DECLARE @A INT,@B VARCHAR(50)。

·定义的变量的生命周期为同一批次或存储过程,即:在你运行的同一批语句(也就是运行时选择的所有语句)或存储过程中,定义的变量都可以使用,变量名称必须唯一。

下面给出常用的变量定义写法,以下变量的声明方式都是合法的:

DECLARE
@A
INT,@B
INT

--最常见的写法

SET
@A=1

--如果写SET @A='XX'会报错,因为XX是字符串且无法隐式转换为数字

SET
@A='23'

--用标量值函数赋值

SET
@A=DBO.FUN_1(@A)

--用子查询赋值

SET
@A=(SELECT
MAX(number)
FROM
MASTER..spt_values)

--用其它函数赋值

SET
@A=@B

--用表达式赋值

SET
@A=@B*5+DBO.FUN_1(@A)-(SELECT
MAX(number)
FROM
MASTER..spt_values)

变量赋值

变量的赋值有多种方式,最常见的方式是以下四种:

  1. SET赋值

    对单个变量赋值可以使用SET,基本写法如下:

    SET
    @A='XYZ'

    需要注意的地方有:

    ·SET后的变量名称必须在本批次中已定义,大小写不限。

    ·=号后面可以写数字、字符、标量值函数、返回一行一列的子查询、其它变量、表达式等,但不能写存储过程。

    ·=号后返回的数据类型必须与变量的数据相同,或能隐式转换成变量的数据类型

    ·SET后的变量名称必须在本批次中已定义,大小写不限。

     

    下面给出常见的SET赋值写法:

    DECLARE
    @A
    INT,@B
    INT

    --最常见的写法

    SET
    @A=1

    --如果写SET @A='XX'会报错,因为XX是字符串且无法隐式转换为数字

    SET
    @A='23'

    --用标量值函数赋值

    SET
    @A=DBO.FUN_1(@A)

    --用子查询赋值

    SET
    @A=(SELECT
    MAX(number)
    FROM
    MASTER..spt_values)

    --用其它函数赋值

    SET
    @A=@B

    --用表达式赋值

    SET
    @A=@B*5+DBO.FUN_1(@A)-(SELECT
    MAX(number)
    FROM
    MASTER..spt_values)

     

  2. SELECT赋值

    SELECT可以被认为是基于SET的强化赋值方式,以下写法与上面SET的基本写法完全等效:

    SELECT
    @A='XYZ'

    SELECT还可以对多个变量同时赋值:

    SELECT
    @A='XYZ',@B='CC'

    SELECT还可以用查询的结果集对变量赋值:

        SELECT
@A=NAME,@B=NAME+'X'

FROM
TB_CLASS

WHERE
NAME
LIKE
'%%'

  1. 输出参数赋值

    在定义存储过程时可以将传入的参数设定为输出参数,然后在其中为其赋值。下面是一个简短的例子:

    CREATE
    PROCEDURE
    PROC_TEST(

    @I
    INT
    OUTPUT

    )

    AS

    SET
    @I=@I+1

    GO

    DECLARE
    @J
    INT

    SET
    @J=5

     

    EXEC
    PROC_TEST
    @J OUTPUT

    EXEC
    PROC_TEST
    @J OUTPUT

     

    SELECT
    @J

    --7

    需要注意的是在存储过程的定义中和执行存储过程的语句中,OUTPUT关键字都是必须的,不然无法返回参数。

  1. UPDATE赋值

    UPDATE里除了可以给列赋新值,还能给变量赋值,这里就涉及到一些底层的知识和高级的用法,这里不多说,只看示例即可:

        DECLARE
@I
INT

 

        UPDATE
TB
SET
COL1='A',@I=1

 

    UPDATE
TB
SET
COL1='B',@I=LEN(col1)
WHERE COL1 LIKE
'%%'

 

变量使用

变量可用的地方很多,在调试函数、存储过程、查询时都会用到,只要能用表达式的地方基本上都能用变量。以下是几个典型用法:

        DECLARE
@I
INT

        SET
@I=1

        --直接输出变量

        SELECT
@I

        --使用变量调试函数

        SELECT
DBO.FUN_TEST2(@I)

        --使用变量作为存储过程的输入参数

        EXEC
PROC_TEST
@I

        --查询中使用变量

        SELECT
*

        FROM
TB

        WHERE
COL1>@I

        --更新中使用变量

        UPDATE
TB
SET
COL1=@I

        WHERE
COL1<>@I

 

以上就是变量使用的全部说明,希望能为读者带来帮助。

SQL SERVER中变量的定义、赋值与使用的更多相关文章

  1. [转] SQL Server中变量的声明和使用方法

    原文地址 SQL Server中变量的声明和使用方法 声明局部变量语法: DECLARE @variable_name DataType 其中 variable_name为局部变量的名称,DataTy ...

  2. SQL Server中 SET 和 SELECT 赋值有什么区别?

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...

  3. SQL Server中变量的声明和使用方法

    网址:http://blog.sina.com.cn/s/blog_63d0c97a0100qpy7.html 声明局部变量语法: DECLARE @variable_name DataType 其中 ...

  4. SQL Server中变量的声明和使用方法

    声明局部变量语法:DECLARE @variable_name DataType其中 variable_name为局部变量的名称,DataType为数据类型.给局部变量赋值有两种方法:1.SET @v ...

  5. SQL SERVER中SELECT和SET赋值相同点与不同点

    SELECT和SET在SQL SERVER中都可以用来对变量进行赋值,但其用法和效果在一些细节上有些不同. 1. 在对变量赋值方面,SET是ANSI标准的赋值方式,SELECT则不是.这也是SET方式 ...

  6. Sql Server中变的定义以及赋值的应用

    --申明变量declare @ad_begin datetimedeclare @fydl varchar(50)declare @userid varchar(50)declare @jdrbm v ...

  7. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  8. Sql server 浅谈用户定义表类型

    1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的 ...

  9. Sql Server数据库之流程定义变量和流程控制语句

    一.局部变量和全局变量 1.声明局部变量 语法:declare @变量名 变量类型 2.给局部变量赋值 语法:set @变量名=值,         select @变量名=值 区别:第一种方式用于普 ...

随机推荐

  1. Poj 1269 Intersecting Lines_几何模板

    #include <iostream> #include <math.h> #include <iomanip> #define eps 1e-8 #define ...

  2. iOS使用ffmpeg播放rstp实时监控视频数据流

    一.编译针对iOS平台的ffmpeg库(kxmovie) 最近有一个项目.须要播放各种格式的音频.视频以及网络摄像头实时监控的视频流数据,经过多种折腾之后,最后选择了kxmovie,kxmovie项目 ...

  3. 很好很实用的.net、网站系统后台模板

    本模板是程序园给大家提供的应用系统开发后台模板,主要使用div+css布局实现,菜单使用了ddaccordion.js菜单控件. 转载请标明:http://www.kwstu.com/ArticleV ...

  4. 模块化利器:RequireJS常用知识

    1. 模块化 目前常见的模块化开发方式,全局空间方式是最基本的一种,另外常见的还有遵循AMD规范的开发方式,遵循CMD规范的开发方式,和ECMAScript 6的开发方式.需要说明的是,CMD和ES6 ...

  5. 集合框架-TreeSet

    TreeSet是Set集合的常见子类. TreeSet:底层结构是 二叉树 元素是有排序的,但是不可以有重复元素. 相关代码演练: /* TreeSet ;元素是有序的,但是不可以元素重复. */ i ...

  6. C# 循环的应用 手机号抽奖 选班长的练习题

    //第一题 //20个手机号滚动显示随机抽出一个中奖号码来: static void bbb(string[] args) { string[] cellPhone = new string[] { ...

  7. 七天学会NodeJS

    七天学会NodeJS  http://www.open-open.com/lib/view/1392611872538

  8. Inno Setup教程

    一.简介 Inno Setup是一款免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务.该软件用Delp ...

  9. Android Studio 没有assets目录的问题

    Where to place the assets folder in Android Studio   If you are having problems with asset files not ...

  10. ApiGen4.1 windows安装教程

    一. ApiGen4.1版本介绍 1.ApiGen介绍 ApiGen是自动生成PHP项目的阅读文档工具. 用于从PHP源代码创建专业的API文档,类似于phpDocumentor/phpDoc. Ap ...