SQL中SET和SELECT赋值的区别
最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果。
那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢?
经过网上的查询,及个人练习,总结两者有以下几点主要区别:
假定有设定变量:
DECLARE @VAR1 VARCHAR (1) DECLARE @VAR2 VARCHAR (2) |
1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要达到同样的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
说到这个,SQL内置的变量:@@ERROR 和 @@ROWCOUNT必须要在一句SQL语句中捕获。如果用set分两句来获取它们,将获取不完整,这时就应该用select来获取值。
*/
2、表达式返回多个值时,用SET将会出错,而SELECT将取最后一个值,如下:
----以下假定Permission表有多个IsRight记录 SELECT @VAR1 = IsRight FROM Permission --将取最后一个值 SET @VAR1 = IsRight FROM Permission --将报错 |
3、表达式无返回值时,用SET将置变量值为NULL,用SELECT交保持变量值,如下:
----以下假定Permission记录为空 SET @VAR1 = '初始值' SELECT @VAR1 = IsRight FROM Permission --此时@VAR1为'初始值' SET @VAR1 = ( SELECT IsRight FROM Permission) --此时@VAR1为NULL |
4、使用标量子查询时,如果无返回值,SET和SELECT一样,都将置为NULL,如下:
----以下假定Permission记录为空 SET @VAR1 = '初始值' SELECT @VAR1 =( SELECT IsRight FROM Permission ) --此时@VAR1为NULL SET @VAR1 = ( SELECT IsRight FROM Permission) --此时@VAR1为NULL |
附上两篇参考文章:
1、http://hi.baidu.com/lovebeast/blog/item/309fc95484581c52d10906b9.html
2、http://www.cnblogs.com/jiajinyi/archive/2009/02/17/1392420.html (着重提到了标量子查询)
<h3>
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>
分类:
ASP.NET(C#)
, SQL(TSQL)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2010-03-30 c#只用一个for输出三角形