--变量分全局、局部、全局是双@@开头、局部是@开头
declare @hh varchar(500),@bb varchar(500) --变量前一定要先声明declare、变量名、然后是数据类型、可以int\varchar\datetime\这些
set @hh='78' --给变量名赋值、给它赋78的值
select @bb=po from Table_1 where NAME=@hh --赋值可以用set、也可以用select 常用的都是直接用=
print @hh
print @bb --然后输出变量、print也是打印的意思、也就是图形界面上窗口的提示
go
select *from Table_1 where NAME=@hh --为什么会显示下红波浪呢、因为声明的变量是在go的批处理中、批处理结束后要使用变量、必须要重新声明
go
--使用set和select变量赋的区别(一)
declare @hh varchar(50),@bb varchar(50)
set @bb='张三',@bb='李四' -- 有下红波浪、set是不能同时变量赋值的、必须要单独使用set、比如set=,set=
go
declare @hh varchar(50),@bb varchar(50) --select可以在同一个句子中变量赋值、打印''里加个空格、好区分、但是也不能同时输出多个变量、必须要+号
select @hh='张三',@bb='李四'
print @hh+' '+@bb
go
--使用set和select变量赋的区别(二)
declare @hh varchar(50)
set @hh=(select name from Table_1 ) --我们先看子查询、是有多个值的,如果是多个值的话就不能用set来赋值、语法是没问题、但执行会报错
go --如果子查询是单个值就可以
declare @hh varchar(50) --select是可以给多个值的子查询赋值的、但是查询的结果是最后的一个值、
select @hh=name from Table_1 --比如子查询有1,2,3这些值、用select赋值得到的是3最后这个值
select @hh
go
--使用set和select变量赋的区别(三)
declare @hh varchar(50)
set @hh='张三'
set @hh=''
set @hh=(select BILL_NO from Table_1 where convert(varchar,NAME)='不存在这个条件' ) --如果子查询通过条件没有查到bill_no这个值的话、那就是空值、也会把空值赋给变量
print @hh --那么之前不管有赋多少个值、最终返回的都是空值null
go --或者说用set赋值是不允许有空值(不管是不是子查询)
declare @hh varchar(50)
set @hh='张三'
select @hh=BILL_NO from Table_1 where convert(varchar,NAME)='不存在这个条件' --使用select赋值、就算有空值也会返回其他有值的变量、就不是把空值赋给变量了
set @hh='李四' --另外如果是多个赋值的话、返回的值是最后赋的那一个、前面不管赋了多少个值、打印出来的都是最后赋予的值
select @hh
go
--为什么最后打印有时候是用select、有时候用print呢、
--select 是查询结果返回数据库里指定某个表的、而print是输出到应用界面上的消息、比如ERP界面的窗口报错提示