
/*********************求1+2+3+4+......................+100的和*******************************/
declare @sum smallint,@i smallint
set @i=1
set @sum=0
label:
if (@i<=100)
begin
set @sum=@sum+@i
set @i=@i+1
goto label
end
print @sum
declare @sum smallint,@i smallint
set @i=1
set @sum=0
label:
if (@i<=100)
begin
set @sum=@sum+@i
set @i=@i+1
goto label
end
print @sum
================================================
都说不要用goto,可我看了一些经典sql 代码,也是常用goto的呀?大家如何看待goto呢?
(转自:http://topic.csdn.net/t/20060324/22/4638629.html)
---------------------------------------------------------------------------
都说不要用goto,可我看了一些经典sql 代码,也是常用goto的呀?大家如何看待goto呢?
大多用到出错时的跳转,可是想问问大家,如果不用goto,用什么办法实现这个功能呢?
---------------------------------------------------------------------------
goto不是功能不好,而是会使得代码混乱,可读性差。一般改用IF等判断语句
---------------------------------------------------------------------------
我还是觉得最好不用!!
怕用成习惯!!
一多起来!跳到什么地方去了都不知道!(个人意见!!)
---------------------------------------------------------------------------
另外一个例子:

USE [spb2.3]
GO
/****** 对象: StoredProcedure [dbo].[spb_WidgetInstances_UserInitialize] 脚本日期: 01/18/2010 15:55:00 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE procedure [dbo].[spb_WidgetInstances_UserInitialize]
(
@OwnerID int,
@PageCode char(4),
@Theme nvarchar(32)
)
as
SET Transaction Isolation Level Read UNCOMMITTED
SET NOCOUNT ON
if (@OwnerID<>0)
begin
Begin transaction
delete from spb_LayoutPages where OwnerID=@OwnerID and PageCode=@PageCode and Theme=@Theme
if(@@error<>0) goto Failure
delete from spb_WidgetsInZones where OwnerID=@OwnerID and ZoneID in
(select ZoneID from spb_WidgetZones where PageCode=@PageCode and Theme=@Theme)
if(@@error<>0) goto Failure
insert into spb_WidgetsInZones (WidgetID,OwnerID,ZoneID,WidgetXml,DisplayOrder)
(select W.WidgetID,@OwnerID,W.ZoneID,W.WidgetXml,W.DisplayOrder from spb_WidgetsInZones W with (nolock) inner join spb_WidgetZones Z with (nolock)
on W.ZoneID = Z.ZoneID where W.OwnerID=0 and Z.PageCode=@PageCode and Z.Theme=@Theme)
if(@@error<>0) goto Failure
commit transaction
return
Failure:
rollback transaction
return
end
GO
/****** 对象: StoredProcedure [dbo].[spb_WidgetInstances_UserInitialize] 脚本日期: 01/18/2010 15:55:00 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE procedure [dbo].[spb_WidgetInstances_UserInitialize]
(
@OwnerID int,
@PageCode char(4),
@Theme nvarchar(32)
)
as
SET Transaction Isolation Level Read UNCOMMITTED
SET NOCOUNT ON
if (@OwnerID<>0)
begin
Begin transaction
delete from spb_LayoutPages where OwnerID=@OwnerID and PageCode=@PageCode and Theme=@Theme
if(@@error<>0) goto Failure
delete from spb_WidgetsInZones where OwnerID=@OwnerID and ZoneID in
(select ZoneID from spb_WidgetZones where PageCode=@PageCode and Theme=@Theme)
if(@@error<>0) goto Failure
insert into spb_WidgetsInZones (WidgetID,OwnerID,ZoneID,WidgetXml,DisplayOrder)
(select W.WidgetID,@OwnerID,W.ZoneID,W.WidgetXml,W.DisplayOrder from spb_WidgetsInZones W with (nolock) inner join spb_WidgetZones Z with (nolock)
on W.ZoneID = Z.ZoneID where W.OwnerID=0 and Z.PageCode=@PageCode and Z.Theme=@Theme)
if(@@error<>0) goto Failure
commit transaction
return
Failure:
rollback transaction
return
end
分类:
050~sqlserver
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)