--由于年度的变化,我需要修改变量的值,去一个一个的修改 易出错,漏掉
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
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
你可以把逻辑放到存储过程中。存储过程支持多结果集输出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
不好意思,定义了一个存储过程,用的是时候怎么使用啊,where 列=“什么啊”
declare @a varchar(10) set @a='2008'--@a 就相当于你要的全局变量where 列=“什么啊”--“什么啊” 用 @a 替换就可以了。因为在定义的时候给这个变量赋予了值 '2008'
目前版本的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)都不会使用索引,对于数据量很大的查询,这种效率问题才会显现出来