Sql Server中的declare基本知识详解
1. 基本知识
@DECLARE
语句用于声明变量
声明的变量可以用于存储临时数据,并在 SQL 查询中多次引用
声明变量:使用 DECLARE 语句声明一个或多个变量
变量命名:变量名以 @ 开头,后面跟随变量名
变量类型:必须为每个变量指定数据类型,如 INT、VARCHAR、DATE 等
赋值:使用 SET 语句或在声明时直接赋值
使用变量:在查询中引用变量,可以进行各种操作,如条件判断、循环等
基本的语法如下:
1 | DECLARE @variable_name datatype;
|
2. Demo
示例 1:简单声明和赋值
1 2 3 4 5 6 | DECLARE @MyNumber INT ;
SET @MyNumber = 10;
SELECT @MyNumber AS 'My Number' ;
|
截图如下:

示例 2:在查询中使用变量
1 2 3 4 5 6 7 8 9 10 11 | DECLARE @FirstName VARCHAR (50);
DECLARE @LastName VARCHAR (50);
DECLARE @FullName VARCHAR (100);
SET @FirstName = 'John' ;
SET @LastName = 'Doe' ;
SET @FullName = @FirstName + ' ' + @LastName;
SELECT @FullName AS 'Full Name' ;
|
截图如下:

示例 3:在条件语句中使用变量
1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE @Threshold INT ;
DECLARE @Result VARCHAR (50);
SET @Threshold = 50;
IF @Threshold > 100
SET @Result = 'Above 100' ;
ELSE
SET @Result = '100 or Below' ;
SELECT @Result AS 'Result' ;
|
截图如下:

示例 4:在循环中使用变量
1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE @Counter INT ;
DECLARE @MaxCount INT ;
SET @Counter = 1;
SET @MaxCount = 5;
WHILE @Counter <= @MaxCount
BEGIN
PRINT 'Counter is ' + CAST (@Counter AS VARCHAR (10));
SET @Counter = @Counter + 1;
END
|
截图如下:

3. 拓展Mysql
对于Mysql的临时变量基本知识如下
声明变量:使用 SET 或 SELECT … INTO 语句来声明变量
变量命名:变量名以 @ 开头,后面跟随变量名
变量类型:MySQL 中的变量不需要显式声明数据类型
使用变量:在查询中引用变量,可以进行各种操作,如条件判断、循环等
基本语法如下:
1 | SET @variable_name = value;
|
与上面同理,Demo如下:
示例 1:简单声明和赋值
1 2 3 4 | SET @MyNumber = 10;
SELECT @MyNumber AS 'My Number' ;
|
截图如下:

示例 2:在查询中使用变量
1 2 3 4 5 6 7 | SET @FirstName = 'John' ;
SET @LastName = 'Doe' ;
SET @FullName = CONCAT(@FirstName, ' ' , @LastName);
SELECT @FullName AS 'Full Name' ;
|
截图如下:

示例 3:在条件语句中使用变量
1 2 3 4 5 6 7 8 9 10 | – 声明并赋值变量
SET @Threshold = 50;
– 条件判断
IF @Threshold > 100 THEN
SET @Result = ‘Above 100 ';
ELSE
SET @Result = ‘100 or Below' ;
END IF;
– 使用变量
SELECT @Result AS ‘Result';
|
截图如下:

示例 4:在循环中使用变量 (必须将循环逻辑封装在存储过程(或存储函数)中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DELIMITER $$
CREATE PROCEDURE LoopExample()
BEGIN
DECLARE Counter INT DEFAULT 1;
DECLARE MaxCount INT DEFAULT 5;
PREPARE stmt FROM 'SELECT ? AS Counter' ;
WHILE Counter <= MaxCount DO
EXECUTE stmt USING @Counter;
SET Counter = Counter + 1;
END WHILE;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
CALL LoopExample();
|
截图如下:

4. 彩蛋
以下为错误的Demo
对于循环遍历,Mysql中不适合使用if,需要使用case
1 2 3 4 5 6 7 8 9 10 | SET @Threshold = 50;
IF @Threshold > 100 THEN
SET @Result = 'Above 100' ;
ELSE
SET @Result = '100 or Below' ;
END IF;
SELECT @Result AS 'Result' ;
|
以及不可直接使用如下方式
1 2 3 4 5 6 7 8 9 10 | SET @Counter = 1;
SET @MaxCount = 5;
PREPARE stmt FROM 'SELECT ? AS Counter' ;
WHILE @Counter <= @MaxCount DO
EXECUTE stmt USING @Counter;
SET @Counter = @Counter + 1;
END WHILE;
DEALLOCATE PREPARE stmt;
|