--由于年度的变化,我需要修改变量的值,去一个一个的修改 易出错,漏掉
declare @a  varchar(10) set @a='2008'
select * from code where iyear=@a
go
declare @a  varchar(10) set @a='2008'
select * from accinformation_year where iyear=@a
--我想是想如下功能(自定义一个全局变量)
declare @a varchar(10) set @a='2008'  --只定义一次无论下面有多少“go” 都认识这个变量  
go
select * from code where iyear=@a
go
select * from accinformation_year where iyear=@a
go

解决方案 »

  1.   

    如果硬要 加 GO 是没有办法实现的你的需求的。这是语法规定。
    你可以把逻辑放到存储过程中。存储过程支持多结果集输出create procedure pr_test
    as
    begin
    declare @a varchar(10) set @a='2008' --只定义一次无论下面有多少“go” 都认识这个变量   
    select * from code where iyear=@a
    select * from accinformation_year where iyear=@aend
      

  2.   


    不好意思,定义了一个存储过程,用的是时候怎么使用啊,where 列=“什么啊”
      

  3.   

    在存储过程中 
    declare @a varchar(10)  set @a='2008'--@a 就相当于你要的全局变量where 列=“什么啊”--“什么啊” 用 @a 替换就可以了。因为在定义的时候给这个变量赋予了值 '2008'
      

  4.   

    不太好使,我想能否定义一个类似 系统变量 的变量, 例如@@version等等,无论在那里都可以引用
      

  5.   

    更正一下@@开头的不是系统变量,是系统函数。
    目前版本的sql server还不能定义系统函数,但是可以用用户自定义函数UDF,可以如下定义:create function dbo.const_year
    ()
    returns int
    as
    begin
       declare @year nvarchar(100);
       set @year = '2008';
       return @year;
    end;
    go但是在应用上跟系统函数有点点区别,必须以 dbo.const_year()的形式引用(必须包括dbo的架构名和后面的括号),如:--只定义一次无论下面有多少“go” 都认识这个变量   
    select * from code where iyear=dbo.const_year()
    go
    select * from accinformation_year where iyear=dbo.const_year()
    go但是这样会带来一些效率上的问题,比如你举例的两个查询中,where条件后如果是使用变量,那么查询时会考虑使用索引加快查询,而你使用函数(不管是系统函数还是UDF)都不会使用索引,对于数据量很大的查询,这种效率问题才会显现出来