表 Student列 score
90
80
70
60DECLARE @iTest intSELECT @iTest = score FROM StudentSELECT @iTest 上面语句会出错吗,或者请问@iTest 的值?10变量的生命周期是什么?10
90
80
70
60DECLARE @iTest intSELECT @iTest = score FROM StudentSELECT @iTest 上面语句会出错吗,或者请问@iTest 的值?10变量的生命周期是什么?10
列 score
90
80
70
60DECLARE @iTest int
SELECT @iTest = score FROM Student
SELECT @iTest
--执行完后@iTest值应该是60,生命周期,应该是语句执行期间~
如果指定top 1,如:SELECT top 1 @iTest = score FROM #t就会返回90。
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
GO
SELECT @iTest = aaa FROM dbo.aa
SELECT @iTest
GO-----
你中间加一个GO,批处理语句执行完毕。接下来的语句属于另外一个批处理语句了,变量当然无效。把GO去掉~
---------------------------呵呵,我在向LZ解释变量的生命周期,呵呵