zoukankan      html  css  js  c++  java
  • Sql Server系列:Transact-SQL变量

      变量是Transact-SQL中由用户定义、可对其赋值并参与运算的一个实体,分为全局变量和局部变量。其中全局变量由系统自定义并维护,全局变量名称前面有@@字符,任何程序均可随时调用。局部变量名称前面有一个@,由用户定义和使用。

    1 局部变量

      局部变量一般出现在批处理、存储过程和触发器中,如果要使用局部变量,必须在使用前以DECLARE语句定义。局部变量仅存在于声明它的批处理、存储过程或触发器中,处理结束后,存储在局部变量中的信息将丢失。

    1.1 局部变量声明

      在使用DECLARE语句来声明局部变量时,必须提供变量名称及数据类型,变量名称前面必须有一个@字符,变量名称最大长度为30个字符。声明变量时可以使用任何系统定义的数据类型或用户自定义的数据类型。

      DECLARE语法:

    DECLARE { @variable_name datatype | [= value]} [,...n]

      参数:

      ◊ @variable_name:变量的名称。变量名必须以@开头。

      ◊ datatype:任何由系统提供的或用户定义的数据类型。变量数据类型不能是text、ntext或image。

      在SQL Server中,一次可以定义多个变量。

    DECLARE @Name VARCHAR(50), @Age INT = 20

    1.2 局部变量赋值

      变量声明后,变量值被默认设置为NULL。可以使用SET或SELECT语句为变量赋值,SET是为变量赋值的首选方法。

      语法格式:

    SET @variable_name = expression
    SELECT @variable_name = expression

      示例:

    DECLARE @Name VARCHAR(50), @Age INT
    SET @Name = 'Test'
    SELECT @Age = 20
    
    SELECT @Name, @Age
    DECLARE @TotalRecords INT
    
    SET @TotalRecords = (SELECT COUNT(1) FROM [dbo].[Product])
    SELECT @TotalRecords = COUNT(1) FROM [dbo].[Product]
    
    SELECT @TotalRecords

      在局部变量没有被赋值之前,其值是NULL,如果要引用,特别是在循环结构中引用,必须先为其赋值。

    DECLARE @Counter INT
    SET @Counter = 1
    
    WHILE @Counter <= 10
        BEGIN
            PRINT @Counter
            SET @Counter = @Counter + 1
            -- SELECT @Counter = @Counter + 1
        END

      在SELECT语句的WHERE字句中使用变量:

    DECLARE @ProductID INT
    SET @ProductID = 1
    
    SELECT * FROM [dbo].[Product] WHERE [ProductID] = @ProductID

      变量可以通过选择列表中当前所引用的值赋值,如果在选择列中引用变量,变量应被赋以标量值或者SELECT语句应仅返回一行。

    DECLARE @MaxQuantity INT
    SET @MaxQuantity = (SELECT MAX([Quantity]) FROM [dbo].[Product])
    SELECT @MaxQuantity
    DECLARE @MaxQuantity INT
    SELECT @MaxQuantity = MAX([Quantity]) FROM [dbo].[Product]
    SELECT @MaxQuantity

      如果SELECT语句返回多行而且变量引用一个非标量表达式,则变量被赋予为结果集最后一行中表达式的返回值。

    DECLARE @ProductID INT
    SELECT @ProductID = [ProductID] FROM [dbo].[Product]
    SELECT @ProductID

      测试[dbo].[Product]表中有5条记录,执行结果为:5

    DECLARE @ProductIDs VARCHAR(100)
    SET @ProductIDs = ''
    SELECT @ProductIDs += CONVERT(VARCHAR,[ProductID]) + ',' FROM [dbo].[Product]
    SELECT @ProductIDs

      执行结果为:1,2,3,4,5,

    1.3 Table类型变量

      Table类型的变量可以作为保存数据的临时表。

    DECLARE @MyProduct TABLE
    (
        ProductID INT,
        ProductName VARCHAR(100)
    );
    
    INSERT INTO @MyProduct
        SELECT [ProductID], [ProductName] FROM [dbo].[Product]
        WHERE [UnitPrict] >= 10;
    
    SELECT * FROM @MyProduct;

    2 全局变量

      全局变量用来跟踪服务器范围和特定会话期间的信息,不能显式被赋值。全局变量不能由用户定义。

  • 相关阅读:
    PHP编程基础学习(一)——数据类型
    6-6 带头结点的链式表操作集(20 分)
    6-5 链式表操作集(20 分)
    6-4 链式表的按序号查找(10 分)
    6-3 求链式表的表长(10 分)
    6-2 顺序表操作集(20 分)
    6-1 单链表逆转(20 分)
    学生成绩管理系统(六):项目总结
    学生成绩管理系统(五):系统的完善与数据库的链接
    学生成绩管理系统(四)
  • 原文地址:https://www.cnblogs.com/libingql/p/4171238.html
Copyright © 2011-2022 走看看