![SQL Server 2016从入门到精通(视频教学超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/756/26793756/b_26793756.jpg)
5.4 其他基本语句
T-SQL中除了这些重要的数据定义、数据操作和数据控制语句之外,还提供了一些其他的基本语句,以此来丰富T-SQL语句的功能。本节将介绍数据声明、数据赋值和数据输出语句。
5.4.1 数据声明——DECLARE
数据声明语句可以声明局部变量、游标变量、函数和存储过程等,除非在声明中提供值,否则声明之后所有变量将初始化为NULL。可以使用SET或SELECT语句对声明的变量赋值。DECLARE语句声明变量的基本语法格式如下:
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T141_40077.jpg?sign=1739531404-vEqa347KbLFECU3x4ENeWX9183Nal3aH-0-3db8e2337534a528a8e55899679d0f9a)
- @ local_variable:变量的名称。变量名必须以at符号(@)开头。
- data_type:系统提供数据类型或是用户定义的表类型或别名数据类型。变量的数据类型不能是text、ntext或image。AS指定变量的数据类型,为可选关键字。
- = value:声明的同时为变量赋值。值可以是常量或表达式,但它必须与变量声明类型匹配,或者可隐式转换为该类型。
【例5.29】声明两个局部变量,名称为username和pwd,并为这两个变量赋值,输入语句如下。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T141_40078.jpg?sign=1739531404-0xPdz1UErxun5JALCVsXpkb8omO5zWl9-0-73bb389085840e7926cb3f85e2261320)
这里定义了两个变量,其中保存了用户名和验证密码,输出结果如图5-22所示。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-P141_7729.jpg?sign=1739531404-rWdDZPLxsytichPrCcHthyEceSSI3mdv-0-24c6a6a9db64e7c8860a675c14e6e738)
图5-22 使用DECLARE声明局部变量
代码中第一个SELECT语句用来对定义的局部变量@pwd赋值,第二个SELECT语句显示局部变量的值。
5.4.2 数据赋值——SET
SET命令用于对局部变量进行赋值,也可以用于用户执行SQL命令时设定SQL Server中的系统处理选项,SET赋值语句的语法格式如下:
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T142_40079.jpg?sign=1739531404-yUN6ClFwagR6woDeBfWTSHmF3nssCw6w-0-65a26f17ca3c7fe31e3a067debc6eee9)
第一条SET语句表示对局部变量赋值,value是一个具体的值,expression是一个表达式;第二条语句表示对执行SQL命令时的选项赋值,ON表示打开选项功能,OFF表示关闭选项功能。
SET语句可以同时对一个或多个局部变量赋值。
SELECT语句也可以为变量赋值,其语法格式与SET语句格式相似。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T142_40080.jpg?sign=1739531404-ODHqlONpkcU7thsvRobehUnSnmZSuSSS-0-48bb2350f731918314b13db620110635)
提示
在SELECT赋值语句中,当expression为字段名时,SELECT语句可以使用其查询功能返回多个值,但是变量保存的是最后一个值;如果SELECT语句没有返回值,则变量值不变。
【例5.30】查询stu_info表中的学生成绩,并将其保存到局部变量stuScore中,输入语句如下。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T142_40082.jpg?sign=1739531404-iHzQmz1hiNxx3pRPnFkj00HoufdnGUhd-0-d77525af32c34df1e2308fc4aa6e251e)
代码执行结果如图5-23所示。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-P142_7796.jpg?sign=1739531404-eH4hOclh58rgPx2G2BC6JduR1OQvFgXn-0-3f2863b9978fa6b85b7cd99624874760)
图5-23 使用SELECT语句为变量赋值
由图5-23可以看到,SELECT语句查询的结果中最后一条记录的s_score字段值为88,给stuScore赋值之后,其显示值为88。
5.4.3 数据输出——PRINT
PRINT语句可以向客户端返回用户定义信息,可以显示局部或全局变量的字符串值。其语法格式如下。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T143_40084.jpg?sign=1739531404-fcRJXAy4SKrl0YTRb3zilthaKNGNwy4e-0-071f0b4f3e4bc3b705f9720a46aed326)
- msg_str:是一个字符串或Unicode字符串常量。
- @local_variable:任何有效的字符数据类型的变量。它的数据类型必须为char或varchar,或者必须能够隐式转换为这些数据类型。
- string_expr:字符串的表达式。可包括串联的文字值、函数和变量。
【例5.31】定义字符串变量name和整数变量age,使用PRINT输出变量和字符串表达式值,输入语句如下。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-T143_40085.jpg?sign=1739531404-LLrbhPHnb8pyR9AfeP8FseIlslXs8Z94-0-9b9ae1f36ca0ca5ca734f20d5a65652c)
代码执行结果如图5-24所示。
![](https://epubservercos.yuewen.com/4FBA48/15253388305240806/epubprivate/OEBPS/Images/Figure-P143_7852.jpg?sign=1739531404-SzikAhgKBBfuBbytBrktSoeIqEB84oBe-0-cb595103a6d336889ac0ea007a1d0cfa)
图5-24 使用PRINT输出变量结果
代码中第3行输出字符串常量值,第4行PRINT的输出参数为一个字符串串联表达式。