考考大家,一个关于变量的问题。

schol 2006-05-14 10:50:00
表 Student

列 score
90
80
70
60

DECLARE @iTest int

SELECT @iTest = score FROM Student

SELECT @iTest

上面语句会出错吗,或者请问@iTest 的值?10

变量的生命周期是什么?10




...全文
152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
schol 2006-05-15
  • 打赏
  • 举报
回复
大家的热情深深的打动了偶,哈哈

都有分。
Tian987 2006-05-14
  • 打赏
  • 举报
回复
不会出错,返回的是最后一行的值,这里不涉及变量生命周期的问题

至于变量生命周期得问题,就是一个批查询啦!

例如,先建一个表
CREATE TABLE [aa] (
[aaa] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
insert into aa values (10)
insert into aa values (20)
insert into aa values (30)
insert into aa values (40)
insert into aa values (50)


接着执行
DECLARE @iTest int
SELECT @iTest = aaa FROM dbo.aa
SELECT @iTest
Go
这样的返回是 50

但是如果执行
DECLARE @iTest int
GO
SELECT @iTest = aaa FROM dbo.aa
SELECT @iTest
GO
会抱错
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@iTest'。
服务器: 消息 137,级别 15,状态 1,行 2
必须声明变量 '@iTest'。

原因是第二个里有两个批查询,第二个批查询里没有声明变量@iTest

OracleRoob 2006-05-14
  • 打赏
  • 举报
回复
如果满足条件的不只1条的话,系统会返回最后一条的值。
schol 2006-05-14
  • 打赏
  • 举报
回复
知道了,现在问的不是HOW而是WHY?
OracleRoob 2006-05-14
  • 打赏
  • 举报
回复
如果满足条件的不只1条的话,系统会返回最后一条的值。
如果指定top 1,如:

SELECT top 1 @iTest = score FROM #t

就会返回90。
bufan2162 2006-05-14
  • 打赏
  • 举报
回复
不能 @iTest = score
schol 2006-05-14
  • 打赏
  • 举报
回复
为什么会是60?
解释一下,就给分了,呵呵。
itblog 2006-05-14
  • 打赏
  • 举报
回复
答:上面的不会出错~
列 score
90
80
70
60

DECLARE @iTest int
SELECT @iTest = score FROM Student
SELECT @iTest
--执行完后@iTest值应该是60,生命周期,应该是语句执行期间~
Tian987 2006-05-14
  • 打赏
  • 举报
回复
你中间加一个GO,批处理语句执行完毕。接下来的语句属于另外一个批处理语句了,变量当然无效。

把GO去掉~
---------------------------

呵呵,我在向LZ解释变量的生命周期,呵呵
ppact 2006-05-14
  • 打赏
  • 举报
回复
每新找到一条数据,就赋给变量,然后把原来的覆盖掉了,所以,最好你显示的,就是最好找到的那一个数据!
itblog 2006-05-14
  • 打赏
  • 举报
回复
变量生命周期,应该是语句执行期间,

DECLARE @iTest int
GO
SELECT @iTest = aaa FROM dbo.aa
SELECT @iTest
GO

-----
你中间加一个GO,批处理语句执行完毕。接下来的语句属于另外一个批处理语句了,变量当然无效。

把GO去掉~

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧