网站首页 > 知识剖析 正文
1,Hi各位读者朋友们大家好,本期继续介绍SQL server,在上一期主要介绍的T-sql编程,本期给大家介绍变量和运算符,
2,首先介绍变量之局部变量,在SQL Server 2019中,变量分为局部变量和全局变量两种类型,特点:使用@符号作为前缀(如@VariableName),必须使用DECLARE语句显式声明,只在声明它们的批处理、存储过程或函数中有效,作用域限于当前会话;
声明语法:
DECLARE @VariableName DataType [= InitialValue];
赋值方式:
SET @VariableName = Value; -- 推荐用于简单赋值
-- 或
SELECT @VariableName = ColumnName FROM TableName WHERE... -- 从查询结果赋值
示例:
DECLARE @EmployeeCount INT;
DECLARE @CurrentDate DATETIME = GETDATE();
-- 赋值
SET @EmployeeCount = (SELECT COUNT(*) FROM Employees);
-- 从查询结果赋值
DECLARE @MaxSalary DECIMAL(10,2);
SELECT @MaxSalary = MAX(Salary) FROM Employees;
3,接下来介绍全局变量,全局变量的特点:使用@@符号作为前缀(如@@VariableName),由SQL Server系统预定义和维护,提供有关SQL Server系统和当前会话的信息,用户不能自定义全局变量;
常用全局变量:
全局变量 | 描述 |
@@ROWCOUNT | 返回受上一语句影响的行数 |
@@ERROR | 返回最后执行的T-SQL语句的错误号 |
@@IDENTITY | 返回最后插入的标识值 |
@@TRANCOUNT | 返回当前连接的活动事务数 |
@@VERSION | 返回SQL Server的版本信息 |
@@SPID | 返回当前用户进程的服务器进程ID |
@@SERVERNAME | 返回运行SQL Server的本地服务器名称 |
@@LANGUAGE | 返回当前使用的语言名称 |
示例:
-- 检查上一条语句影响的行数
DELETE FROM Employees WHERE DepartmentID = 3;
PRINT '删除的行数: ' + CAST(@@ROWCOUNT AS VARCHAR);
-- 获取最后插入的标识值
INSERT INTO Orders (CustomerID, OrderDate) VALUES (1, GETDATE());
PRINT '新订单ID: ' + CAST(@@IDENTITY AS VARCHAR);
-- 检查错误状态
BEGIN TRY
-- 可能出错的代码
END TRY
BEGIN CATCH
PRINT '错误号: ' + CAST(@@ERROR AS VARCHAR);
END CATCH
结合以上局部变量和全局变量的对比:
特性 | 局部变量 | 全局变量 |
前缀 | @ | @@ |
声明 | 需要DECLARE | 系统预定义 |
作用域 | 当前批处理/过程 | 整个会话 |
可自定义 | 是 | 否 |
生命周期 | 批处理/过程执行期间 | 会话期间 |
用途 | 存储临时数据 | 提供系统信息 |
4,下面介绍运算符,首先介绍算术运算符:
运算符 | 描述 | 示例 |
+ | 加法 | SET @Total = @A + @B |
- | 减法 | SET @Diff = @X - @Y |
* | 乘法 | SET @Area = @Length * @Width |
/ | 除法 | SET @Avg = @Total / @Count |
% | 取模 | SET @Remainder = @Num % 2 |
declare @num1 int;
declare @num2 int;
set @num1=12;
set @num2=10;
--数字相加
select @num1+@num2
declare @str1 nvarchar(10);
declare @str2 nvarchar(10);
set @str1='xzhu';
set @str2='chengxu';
--字符串相加+
select @str1+@str2
--字符串数字相加需要类型转换
select @str2+ convert(varchar(10),@num1)
--数字相减
select @num1-@num2
--数字相乘
select @num1 * @num2
--数字相除
select @num1 / @num2
--数字取余
select @num1 % @num2
比较运算符:
运算符 | 描述 | 示例 |
= | 等于 | IF @Status = 1 |
<> | 不等于 | WHERE DeptID <> 5 |
> | 大于 | HAVING COUNT(*) > 10 |
< | 小于 | IF @Age < 18 |
>= | 大于等于 | WHILE @Counter >= 0 |
<= | 小于等于 | CASE WHEN Price <= 100 |
逻辑运算符:
运算符 | 描述 | 示例 |
AND | 逻辑与 | WHERE Active=1 AND Age>30 |
OR | 逻辑或 | IF @Error OR @Warning |
NOT | 逻辑非 | WHERE NOT Deleted |
IN | 值列表匹配 | WHERE ID IN (1,3,5) |
BETWEEN | 范围匹配 | WHERE Salary BETWEEN 5000 AND 10000 |
LIKE | 模式匹配 | WHERE Name LIKE '张%' |
IS NULL | 空值判断 | WHERE Phone IS NULL |
综合应用示例:
-- 计算员工奖金
DECLARE @BaseSalary DECIMAL(10,2) = 5000.00;
DECLARE @PerformanceRating INT = 85;
DECLARE @Bonus DECIMAL(10,2);
DECLARE @FinalSalary DECIMAL(10,2);
-- 使用复合运算符
SET @Bonus = @BaseSalary * 0.1; -- 基础奖金10%
-- 绩效加成
IF @PerformanceRating BETWEEN 80 AND 89
SET @Bonus *= 1.2; -- 良好绩效增加20%
ELSE IF @PerformanceRating >= 90
SET @Bonus *= 1.5; -- 优秀绩效增加50%
-- 计算最终薪资
SET @FinalSalary = @BaseSalary + @Bonus;
-- 输出结果
PRINT CONCAT('基本工资: ', @BaseSalary);
PRINT CONCAT('绩效评级: ', @PerformanceRating);
PRINT CONCAT('奖金金额: ', @Bonus);
PRINT CONCAT('最终薪资: ', @FinalSalary);
PRINT CONCAT('影响行数: ', @@ROWCOUNT);
5,实战训练
变量命名:使用有意义的名称(如@EmployeeCount而非@a)遵循一致的命名约定(如驼峰式或下划线式)
类型选择:
-- 精确数值
DECLARE @Price DECIMAL(10,2) = 99.99;
-- 大文本数据
DECLARE @Description NVARCHAR(MAX);
-- 日期时间
DECLARE @Created DATETIME2(7) = SYSUTCDATETIME();
NULL处理:
-- 安全处理NULL值
DECLARE @Commission DECIMAL(10,2) = ISNULL(@InputCommission, 0);
-- 使用COALESCE处理多个可能NULL的值
DECLARE @DisplayName NVARCHAR(100) = COALESCE(@NickName, @FirstName, 'N/A');
运算符优先级:括号 > 算术 > 比较 > 逻辑,复杂表达式始终使用括号明确优先级
性能考虑:避免在WHERE子句中对变量使用函数,表变量适用于小数据集,大数据集考虑临时表,掌握这些变量和运算符的使用方法,可以显著提高T-SQL编程的效率和代码质量。
- 上一篇: 威纶通触摸屏宏指令基本应用二
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-08-01 威纶通触摸屏宏指令基本应用二
- 2025-08-01 如何实现动态钟表转动?
- 2025-08-01 Dart编程学习笔记03-函数
- 2025-08-01 人事管理中经常要用到的5个函数公式,总有一个你会用到
- 2025-08-01 Is系列判断函数都不掌握,那就真的Out了
- 2025-08-01 数据库 SQL 约束之 DEFAULT
- 2025-08-01 支付宝新功能?手把手教你调整花呗还款日
- 2025-08-01 碎片时间学编程「335]:获取指定日期为一年中的第几周
- 2025-08-01 Excel 函数讲解:DATEDIF 函数,精准计算日期间隔难题
- 2025-08-01 Excel 函数讲解:EDATE 函数,轻松搞定日期批量推算!
- 08-01技术栈:SQL server数据库教程第八集
- 08-01威纶通触摸屏宏指令基本应用二
- 08-01如何实现动态钟表转动?
- 08-01Dart编程学习笔记03-函数
- 08-01人事管理中经常要用到的5个函数公式,总有一个你会用到
- 08-01Is系列判断函数都不掌握,那就真的Out了
- 08-01数据库 SQL 约束之 DEFAULT
- 08-01支付宝新功能?手把手教你调整花呗还款日
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)