关于sqlserver的T-SQL语句的变量作用域的疑问?
刚才在用查询语句试了一下多层套ifelse里面declare变量,现在有点疑问发觉t-sql语句里面的变量好像和java(C#)的变量有点不一样,t-sql语句里面的变量...
刚才在用查询语句试了一下多层套 if else 里面declare变量,现在有点疑问
发觉 t-sql 语句里面的变量 好像和java(C#)的变量有点不一样,
t-sql 语句里面的变量是不是没有作用域、局部变量、全局变量之类的概念的?
declare 了一个变量(如@count int),好像不管在查询语句结构的哪里(即使从C#或Java来看 @count 是局部变量),
那么下面的语句结构里只要保持这个@count 的唯一性,就都可以重复使用,而不用再declare…… 展开
发觉 t-sql 语句里面的变量 好像和java(C#)的变量有点不一样,
t-sql 语句里面的变量是不是没有作用域、局部变量、全局变量之类的概念的?
declare 了一个变量(如@count int),好像不管在查询语句结构的哪里(即使从C#或Java来看 @count 是局部变量),
那么下面的语句结构里只要保持这个@count 的唯一性,就都可以重复使用,而不用再declare…… 展开
6个回答
展开全部
T-SQL的变量作用域,同普通程序的作用域差不多,只在定义的范围内有效
1.if else内定义的,只能在这里面使用,出去后无效
2.if else之前定义的,也可以在if else内使用
3.if else之后定义的,不可能在if else内使用
关于唯一性,同级的两个作用域中可以定义相同的,但不同级的不能重名
1.if else内定义的,只能在这里面使用,出去后无效
2.if else之前定义的,也可以在if else内使用
3.if else之后定义的,不可能在if else内使用
关于唯一性,同级的两个作用域中可以定义相同的,但不同级的不能重名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
T-SQL的变量作用域和JAVA里一样,既有局部变量也有全局变量,其用法跟jAVA也一样。
比如
一、declare @count int1
if begin end else beigin end
这里的@count就是全局变量
二、if begin declare @count int1 end else beigin end
这里的@count就是局部变量
以上指的唯一性,如果是全局变量则是唯一的,如果是局部变量,在同级层的作用域是可以重复的
比如
一、declare @count int1
if begin end else beigin end
这里的@count就是全局变量
二、if begin declare @count int1 end else beigin end
这里的@count就是局部变量
以上指的唯一性,如果是全局变量则是唯一的,如果是局部变量,在同级层的作用域是可以重复的
追问
不是的吧~ 和java不太一样的吧,java的倒是和C#没什么区别
例如 t-sql
if(1=1)
begin
declare @haha int
set @haha=0
end
else
begin
declare @haha int
set @haha=1
end
@haha 这里应该就是所谓“局部”变量,sqlserver中这么写会报错的,在查询批次或存储过程内部必须唯一
消息 134,级别 15,状态 1,第 9 行
变量名 '@haha' 已声明。变量名在查询批次或存储过程内部必须唯一。
追答
这位仁兄提点的有道理,我还一直以为这样子可以的呢,今天才发现不行,谢谢这位仁兄
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量有几点:
1. go语句后,也就是一个批次内有效.
2. 存储过程内表示一个域.走出存储过程就没有效了,包括子存储过程,动态语句内也无效.
3. 一个批次只需要声明一次.
1. go语句后,也就是一个批次内有效.
2. 存储过程内表示一个域.走出存储过程就没有效了,包括子存储过程,动态语句内也无效.
3. 一个批次只需要声明一次.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无声明的情况下,变量的作用域模认为批处理中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询