表 Student列 score  
90
80
70
60DECLARE @iTest intSELECT @iTest = score FROM StudentSELECT @iTest  上面语句会出错吗,或者请问@iTest 的值?10变量的生命周期是什么?10

解决方案 »

  1.   

    答:上面的不会出错~
    列 score  
    90
    80
    70
    60DECLARE @iTest int
    SELECT @iTest = score FROM Student
    SELECT @iTest  
    --执行完后@iTest值应该是60,生命周期,应该是语句执行期间~
      

  2.   

    如果满足条件的不只1条的话,系统会返回最后一条的值。
    如果指定top 1,如:SELECT top 1 @iTest = score FROM #t就会返回90。
      

  3.   

    知道了,现在问的不是HOW而是WHY?
      

  4.   

    不会出错,返回的是最后一行的值,这里不涉及变量生命周期的问题至于变量生命周期得问题,就是一个批查询啦!例如,先建一个表
    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
      

  5.   

    变量生命周期,应该是语句执行期间,DECLARE @iTest int
    GO
    SELECT @iTest = aaa FROM dbo.aa
    SELECT @iTest
    GO-----
    你中间加一个GO,批处理语句执行完毕。接下来的语句属于另外一个批处理语句了,变量当然无效。把GO去掉~
      

  6.   

    你中间加一个GO,批处理语句执行完毕。接下来的语句属于另外一个批处理语句了,变量当然无效。把GO去掉~
    ---------------------------呵呵,我在向LZ解释变量的生命周期,呵呵