关于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……
展开
 我来答
yumifanshu
2011-07-21 · TA获得超过239个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:127万
展开全部
变量有几点:
1. go语句后,也就是一个批次内有效.
2. 存储过程内表示一个域.走出存储过程就没有效了,包括子存储过程,动态语句内也无效.
3. 一个批次只需要声明一次.

建议编写t-sql的时候,养成将变量声明在语句首的习惯.不要在逻辑控制语句内声明.
雪夜hpping
2011-07-21 · TA获得超过468个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:466万
展开全部
T-SQL的变量作用域,同普通程序的作用域差不多,只在定义的范围内有效
1.if else内定义的,只能在这里面使用,出去后无效
2.if else之前定义的,也可以在if else内使用
3.if else之后定义的,不可能在if else内使用

关于唯一性,同级的两个作用域中可以定义相同的,但不同级的不能重名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乙克洋
2011-07-21
知道答主
回答量:21
采纳率:0%
帮助的人:0
展开全部
T-SQL的变量作用域和JAVA里一样,既有局部变量也有全局变量,其用法跟jAVA也一样。
比如
一、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' 已声明。变量名在查询批次或存储过程内部必须唯一。
追答
这位仁兄提点的有道理,我还一直以为这样子可以的呢,今天才发现不行,谢谢这位仁兄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pro_str
2011-07-21 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:104万
展开全部
变量有几点:
1. go语句后,也就是一个批次内有效.
2. 存储过程内表示一个域.走出存储过程就没有效了,包括子存储过程,动态语句内也无效.
3. 一个批次只需要声明一次.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangzhilong52
2011-07-26 · TA获得超过384个赞
知道小有建树答主
回答量:622
采纳率:0%
帮助的人:338万
展开全部
无声明的情况下,变量的作用域模认为批处理中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式