SQL中的go、begin、end的用法

本文介绍在SQLServer中如何使用go信号进行T-SQL批处理,以及如何利用BEGIN和END语句来组合多条T-SQL语句形成逻辑块,特别展示了在IF条件判断中如何运用这些结构。

转自:https://www.cnblogs.com/shuibi/p/6560319.html

go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go)

BEGINEND 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。

例如,当 IF 语句仅控制一条 Transact-SQL 语句的执行时,不需要使用 BEGIN 或 END 语句:

IF (@@ERROR <> 0)
   SET @ErrorSaveVariable = @@ERROR

如果 @@ERROR 为 0,则仅跳过 SET 语句。

用 BEGIN 和 END 语句可以使 IF 语句在计算结果为 FALSE 时跳过语句块:

IF (@@ERROR <> 0)
BEGIN
   SET @ErrorSaveVariable = @@ERROR
   PRINT 'Error encountered, ' + 
         CAST(@ErrorSaveVariable AS VARCHAR(10))
   END

BEGIN 和 END 语句必须成对使用:任何一个均不能单独使用。BEGIN 语句单独出现在一行中,后跟 Transact-SQL 语句块。最后,END 语句单独出现在一行中,指示语句块的结束。

### SQL 中 `ISNUMERIC` 函数的使用方法与示例 #### 定义与功能 `ISNUMERIC` 是一种 SQL Server 提供的功能,用于判断给定的表达式是否可以被成功转换为任意一种数值数据类型(如整数、浮点数、货币或小数)。如果输入表达式的计算值属于有效数值,则返回 `1`;否则返回 `0`[^3]。 #### 语法格式 ```sql ISNUMERIC(expression) ``` - **参数**: `expression` —— 可能是一个常量、列名或是复杂的表达式。 - **返回值**: 整形值 (`1` 或 `0`)。 #### 功能特点 需要注意的是,尽管某个字符串可能通过了 `ISNUMRIC` 测试,这并不意味着它一定能毫无错误地参与所有的算术运算。例如,某些特殊符号的存在可能会干扰实际操作过程中的转换逻辑[^3]。 #### 示例演示 以下是一些具体的例子来帮助理解如何运用这个函数: ##### 基础案例 ```sql SELECT ISNUMERIC(99) AS MyInt, ISNUMERIC('-99') AS MyNegInt, ISNUMERIC('-0.99') AS MyNegFrac, ISNUMERIC('-0.00') AS MyNegZero, ISNUMERIC('5E2') AS MyExponent; ``` 以上查询语句的结果将是六个字段全部显示为 `1`,因为每一个指定的内容都能够被视为合法的数字形式[^1]。 ##### 复杂场景 考虑一些稍微复杂一点的情形: ```sql SELECT ISNUMERIC('$123.45') AS MoneyFormat, -- 返回 1 ISNUMERIC('123abc') AS InvalidString, -- 返回 0 ISNUMERIC('123 ') AS TrailingSpace, -- 返回 1 ISNUMERIC(' 123') AS LeadingSpace; -- 返回 1 ``` 这里值得注意的地方在于带前导零或者尾随空格并不会影响最终结果,而一旦混合进非数字字符之后就不再被认为是纯粹意义上的“数字”了[^3]。 #### 结合自定义函数的应用实例 假设我们有一个需求是要统计某段文字里特定子串出现次数,在这种情况下我们可以利用之前提到过的用户定义函数配合条件过滤掉那些不符合标准的数据项后再做进一步处理。如下所示即为这样一个综合应用的例子: 首先创建辅助性的计数器函数: ```sql CREATE FUNCTION [dbo].[m_count]( @str_one NVARCHAR(200), @str_two NVARCHAR(200) ) RETURNS INT AS BEGIN DECLARE @sqlcount INT; SET @sqlcount = (LEN(@str_one) - LEN(REPLACE(@str_one, @str_two, ''))) / LEN(@str_two); RETURN @sqlcount; END; GO ``` 接着编写主查询部分,加入必要的筛选条件排除异常记录: ```sql SELECT dbo.m_count(MyColumn, 'e') AS CountResult FROM MyTable WHERE ISNUMERIC(MyColumn)=1 AND MyColumn LIKE '%[A-Za-z]%'; ``` 在这个复合查询当中,先借助 `ISNUMERIC` 排除明显不满足要求的数据行,然后再针对剩余符合条件的目标执行精确匹配并完成相应的数量统计工作[^2]。 --- ###