--这样才会有输出 DECLARE @age int ;with 客户表(姓名,年龄) as( select '熊俊',20 union all select '其他1',30 union all select '其他2',40 ) SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊'--你此处只是给@age变量赋值,并不是选择任何结果,而且多条记录(此处30,40)时,会返回最后一个符合条件的值 select @age /*----------- 40(1 行受影响) */
SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊' --这条语句的作用是给变量@age赋值,并没有输出,而且这样赋值的话还有个问题,就是当姓名<>'熊俊' --的记录数据大于两个时,它只会取其中的一条,可能不是你想要的 SELECT @age --再加上这条语句才会输出@age的值.
--哥们,你理解错了。此处 SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊' --是给@age赋值,而你要有结果输出,上面是一个例子 年龄必须有一个或多个值且有符合where条件的DECLARE @age int ;with 客户表(姓名,年龄) as( select '熊俊',20 union all select '其他1',30 union all select '其他2',40 ) SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊' select @age -------------------------------------------------------------------------- /* 40 (1 行受影响) */
DECLARE @age int -- 定义变量 SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊' -- 变量赋值 select @age -- 变量输出
--这样才会有输出
DECLARE @age int
;with 客户表(姓名,年龄) as(
select '熊俊',20
union all select '其他1',30
union all select '其他2',40
)
SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊'--你此处只是给@age变量赋值,并不是选择任何结果,而且多条记录(此处30,40)时,会返回最后一个符合条件的值
select @age
/*-----------
40(1 行受影响)
*/
SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊'
--这条语句的作用是给变量@age赋值,并没有输出,而且这样赋值的话还有个问题,就是当姓名<>'熊俊'
--的记录数据大于两个时,它只会取其中的一条,可能不是你想要的
SELECT @age --再加上这条语句才会输出@age的值.
SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊'
--是给@age赋值,而你要有结果输出,上面是一个例子
年龄必须有一个或多个值且有符合where条件的DECLARE @age int
;with 客户表(姓名,年龄) as(
select '熊俊',20
union all select '其他1',30
union all select '其他2',40
)
SELECT @age = 年龄 FROM 客户表 WHERE 姓名<>'熊俊'
select @age
--------------------------------------------------------------------------
/*
40
(1 行受影响)
*/
SELECT @age = 年龄
FROM 客户表 WHERE 姓名<>'熊俊' -- 变量赋值
select @age -- 变量输出
第二个是查询并赋值, 当然就没有输出, 也就是你把查询结果重定向到变量里面了
你要输出, 那应该另写语句来输出变更, 比如 select @age, 或者 print @age
SELECT @age = 年龄
FROM 客户表 WHERE 姓名<>'熊俊' -- 变量赋值
select @age -- 变量输出第一个Select 只是为 变量@age 赋值
第二个Select 才是输出 变量@age 的值