SQL中select与set的区别

SQL中select与set的区别

ID:42562580

大小:19.81 KB

页数:4页

时间:2019-09-17

SQL中select与set的区别_第1页
SQL中select与set的区别_第2页
SQL中select与set的区别_第3页
SQL中select与set的区别_第4页
资源描述:

《SQL中select与set的区别》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、SQL赋值SET和SELECT有什么区别?事实上SQLServer数据库的开发者在SQLServer7.0(1999)版本之前都是用SELECT赋值的,但在SQLServer7.0之后,推出了SET方法赋值,而且Microsoft在其联机帮助文档中明确提出推荐使用SET方法赋值。这让开发者很迷惑,Microsoft也没有明确说明为什么SET方法是被推荐的。本文会讲明SET和SELECT的区别,而且让你明白什么时候用SET,什么时候用SELECT。以下代码为使用SET和SELECT赋值。DECLARE@Variable1ASint,@Variable2ASintSELECT@V

2、ariable1=1SET@Variable2=2下面就可以说说区别了:1.假如你是标准SQL的开发者,那么请使用SET吧,因为SET是ANSI标准的SQL语句,SELECT不是。2.你可以使用SELECT一次给两个以前变量赋值,但是SET不能。DECLARE@Variable1ASint,@Variable2ASintSELECT@Variable1=1,@Variable2=2SET@Variable1=1SET@Variable2=2到目前来说,这没有问题,但是如果你曾经写过处理错误的T-SQL语句。你可能会意识到系统变量@@ERRORand@@ROWCOUNT必须要在

3、一句SQL语句中捕获。并且是在DML语句(INSERT,UPDATE,DELETE等)之后立即捕获。如果不是这样,这样系统变量会马上重新设置为0。如果这时你还是使用校准SET来赋值,那你就麻烦了。如下例子说明这个问题:DECLARE@Errorint,@RowCountintSELECTprice/0FROMdbo.titlesSET@RowCount=@@ROWCOUNTSET@Error=@@ERRORSELECT@ErrorASErrorGO以上代码如果在pubs数据库中运行,@@ERROR值会显示为0,但实际是显示divisionbyzero,错误号为8134.在这样

4、的情况下,我们可以忘掉SET语句,使用SELECT吧。DECLARE@Errorint,@RowCountintSELECTprice/0FROMdbo.titlesSELECT@RowCount=@@ROWCOUNT,@Error=@@ERRORSELECT@ErrorASError但是如果你坚持使用标准ANSISQL赋值方法,也是有办法的,但是可读性不好,不推荐这样。DECLARE@ErrorAndRowcountASvarchar(25),@Errorint,@RowCountintSELECTprice/0FROMdbo.titlesSET@ErrorAndRowco

5、unt=CAST(@@ERRORASvarchar(12))+'.'+CAST(@@ROWCOUNTASvarchar(12))SET@Error=CAST(PARSENAME(@ErrorAndRowcount,2)ASint)SET@RowCount=CAST(PARSENAME(@ErrorAndRowcount,1)ASint)SELECT@ErrorASError,@RowCountASRow_CountSET@Error=CAST(LEFT(@ErrorAndRowcount,CHARINDEX('.',@ErrorAndRowcount)-1)ASint)SET

6、@RowCount=CAST(RIGHT(@ErrorAndRowcount,CHARINDEX('.',REVERSE(@ErrorAndRowcount))-1)ASint)SELECT@ErrorASError,@RowCountASRow_CountGO3.SET和SELECT还有一个区别是,当使用查询出来的值赋值给变量时,SET和SELECT都可以实现,但当查询出的值为多个是,SET会提示错误,但SELECT不会,只会接受最后一个值。这点很重要,也是很多程序Bug容易被忽略的地方。如下是例子:SETNOCOUNTONCREATETABLE#Test(iint,jva

7、rchar(10))INSERTINTO#Test(i,j)VALUES(1,'FirstRow')INSERTINTO#Test(i,j)VALUES(1,'SecondRow')GODECLARE@jvarchar(10)SELECT@j=jFROM#TestWHEREi=1SELECT@jGO但你用SET重写上面的SQL语句。DECLARE@jvarchar(10)SET@j=(SELECTjFROM#TestWHEREi=1)SELECT@j将会报错:Server:Msg512,Level16,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。