sql declare的用法,SQL中declare,SQLserver中的declare变量用法

sql declare的用法,SQL中declare,SQLserver中的declare变量用法

本文主要介绍声明变量在sqlserver中的使用。SQL中的declare是指声明一个变量,一般用在函数和存储过程中。有兴趣的可以过来了解一下。

SQL中的declare用法

平时写SQL查询和存储过程都是凭感觉。我没有探索过SQL的具体语法,但我总是用c#来模仿。前几天在项目中遇到一个问题,引起了我对declare定义的变量范围的兴趣。

我们都知道c#中的局部变量。如果我们在if中定义一个变量,它的作用将会一直到if结束。在IF之外不被识别,在else中也不能使用。简单写下来。

如果(真)

{

int 32 I=1;

控制台。WriteLine(I);

}

I的作用域在if内部,如果我们在if外部使用这个变量。

如果(真)

{

int 32 I=1;

控制台。WriteLine(I);

}

控制台。WriteLine(I);

第二条输出语句将报告一个错误。

名称“I”在当前上下文中不存在

I的范围已经指明。

那么如果我们用sql写这样的代码会怎么样呢?先把if写进去。

如果1=1

开始

声明@testVARCHAR

SET@test='1 '

打印' inif:' @测试

结束

看看if:1中的运行结果和输出。这是可以预见的结果。那么让我们尝试在if之外使用变量@test。

如果1=1

开始

声明@testVARCHAR

SET@test='1 '

打印' inif:' @测试

结束

打印' outif:' @test

这样的结果是什么?我不知道你怎么想的,但是我的大脑顺势而为,认为这应该报错,这不在变量的范围之内。实际结果不仅正确,而且@test的值还在。

在if:1中

out if:1

看到这个结果,我很沮丧。SQL太出乎意料了。

在SQL SERVER 2005的帮助文档中的declare的帮助中,找到了这句话。在第三行备注中,“局部变量的作用域是声明它们的批处理”。

Msdn地址:http://msdn.microsoft.com/zh-cn/library/ms188927.aspx

这一行在这么大的文章里,真的不引人注目。

现在我们知道了原始声明变量的作用域是它所在的批处理,if不能阻塞它的作用域。我们的代码if内部和外部的代码都在一个批处理中,所以@test是可用的,if中设置的值仍然在那里。

下面我来修改一下代码。在SQL中,GO语句用于区分批处理。

如果1=1

开始

声明@testVARCHAR

SET@test='1 '

打印' inif:' @测试

结束

打印' outif:' @test

没错,在检查语法之后,SQL报告了错误“必须声明标量变量' @test '”

注意:GO用在sql语句的末尾。比如一个批处理语句是这样的:select * from,b select * from a .在最后一个select后面加一个GO,这样可以一次执行两条sql语句。

关于在SQL server中使用声明变量的文章到此结束。有关在SQL server中声明变量的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: