本文面向对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. MyEclipse中新建JSP(Advanced Template)文件时自动生成的

    <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="ca ...

  2. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  3. 剑指offer57 删除链表中重复的结点

    class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(!pHead) return pHead; str ...

  4. 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”。是否缺少程序集引用?

    using System.Windows.Forms.DataVisualization.Charting; 编译时报警:命名空间"System.Windows.Forms"中不存 ...

  5. JDK自带工具jps,jstat,jmap,jconsole使用

    jps 与ps命令类似: ps -ef|grep java 用来显示本地的java进程,查看本地执行着几个java应用,并显示进程号. [root@SE43 ~]# jps //仅仅显示进程号 238 ...

  6. 去掉UItableview headerview黏性

    //去掉UItableview headerview黏性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView ...

  7. BF算法(朴素的模式匹配算法)

    #include <stdio.h> #include <stdlib.h> int Index_BF(char S[],char T[])//s为目标串(长串),t为模式串( ...

  8. 开发移动端web应用, 使用手机自带键盘的搜索按钮

    很多时候在移动端的web页面中, 需要使用搜索功能, 然而页面中并没有太多的空间来放置一个像pc端上那样的搜索按钮, 这时候就需要借用手机输入法自带的搜索按钮来实现点击搜索 虽然不是什么大的功能, 但 ...

  9. mysql错误:Error Code: 1175. You are using safe update mode and you tried to update a table……

    今天遇到一个mysql错误:   Error Code: . You are using safe update mode and you tried to update a table withou ...

  10. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...