SQL Server中的存储过程

什么是存储过程?

存储过程是一段预先编写好的 SQL 代码,可以保存在数据库中以供反复使用。它允许将一系列 SQL 语句组合成一个逻辑单元,并为其分配一个名称,以便在需要时调用执行。存储过程可以接受参数,使其更加灵活和通用。

存储过程语法

创建存储过程的语法如下:

CREATE PROCEDURE 存储过程名称
AS
SQL语句
GO;

执行存储过程的语法如下:

EXEC 存储过程名称;

演示数据库

以下是 Northwind 示例数据库中 "Customers" 表的部分内容:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

存储过程示例

以下 SQL 语句创建了一个名为 "SelectAllCustomers" 的存储过程,用于从 "Customers" 表中选择所有记录:

CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;

执行上述存储过程的方法如下:

EXEC SelectAllCustomers;

带有一个参数的存储过程

以下 SQL 语句创建了一个存储过程,该过程从 "Customers" 表中选择特定城市的客户:

CREATE PROCEDURE SelectAllCustomers @City nvarchar(30)
AS
SELECT * FROM Customers WHERE City = @City
GO;

执行上述存储过程的方法如下:

EXEC SelectAllCustomers @City = 'London';

带有多个参数的存储过程

设置多个参数非常简单。只需逐个列出每个参数及其数据类型,用逗号分隔。

以下 SQL 语句创建了一个存储过程,该过程从 "Customers" 表中选择特定城市和特定邮政编码的客户:

CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;

执行上述存储过程的方法如下:

EXEC SelectAllCustomers @City = 'London', @PostalCode = 'WA1 1DP';

SQL 注释用于提供对 SQL 语句的解释,或者在调试和维护过程中临时禁用某些语句。注释不会被数据库执行。

单行注释

单行注释以 -- 开头,后面的文本将被注释掉。

-- 这是单行注释
SELECT * FROM Customers;

在单行注释中,-- 后面的文本会被忽略。

单行注释在语句末尾

SELECT * FROM Customers -- WHERE City='Berlin';

在这个例子中,-- 后面的文本和语句末尾的内容都被忽略。

多行注释

多行注释以 /* 开头,以 */ 结尾,之间的所有文本都被注释掉。

/* 这是
多行注释 */
SELECT * FROM Customers;

在多行注释中,/**/ 之间的文本都被忽略。

多行注释忽略多条语句

/* SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories; */
SELECT * FROM Suppliers;

在这个例子中,/**/ 之间的所有语句都被注释掉。

部分注释

要仅忽略语句的一部分,可以在适当位置使用 /* */ 注释。

SELECT CustomerName, /*City,*/ Country FROM Customers;

在这个例子中,/**/ 之间的 City 列会被注释掉,而其他部分保持不变。

部分注释语句

SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
AND Country='USA'
ORDER BY CustomerName;

在这个例子中,/**/ 之间的部分条件被注释掉,但其他条件保持不变。

SQL 算术运算符

加法 (+): 用于将两个值相加。

SELECT column1 + column2 AS SumResult FROM tableName;

减法 (-): 用于从第一个值中减去第二个值。

SELECT column1 - column2 AS Difference FROM tableName;

乘法 (*): 用于将两个值相乘。

SELECT column1 * column2 AS Product FROM tableName;

除法 (/): 用于将第一个值除以第二个值。

SELECT column1 / column2 AS Quotient FROM tableName;

取模 (%): 返回除法的余数。

SELECT column1 % column2 AS Modulus FROM tableName;

SQL 位运算符

按位与 (&): 对二进制数进行按位与运算。

SELECT column1 & column2 AS BitwiseAND FROM tableName;

按位或 (|): 对二进制数进行按位或运算。

SELECT column1 | column2 AS BitwiseOR FROM tableName;

按位异或 (^): 对二进制数进行按位异或运算。

SELECT column1 ^ column2 AS BitwiseXOR FROM tableName;

SQL 比较运算符

等于 (=): 判断两个值是否相等。

SELECT column1 FROM tableName WHERE column1 = column2;

大于 (>): 判断一个值是否大于另一个值。

SELECT column1 FROM tableName WHERE column1 > column2;

小于 (<): 判断一个值是否小于另一个值。

SELECT column1 FROM tableName WHERE column1 < column2;

大于等于 (>=): 判断一个值是否大于或等于另一个值。

SELECT column1 FROM tableName WHERE column1 >= column2;

小于等于 (<=): 判断一个值是否小于或等于另一个值。

SELECT column1 FROM tableName WHERE column1 <= column2;

不等于 (<>!=): 判断两个值是否不相等。

SELECT column1 FROM tableName WHERE column1 <> column2;

SQL 复合运算符

复合运算符是一组用于执行多个操作的运算符。

加等于 (+=): 将右侧的值添加到左侧的值,并将结果分配给左侧的值。

UPDATE tableName SET column1 += 10 WHERE condition;

减等于 (-=): 从左侧的值中减去右侧的值,并将结果分配给左侧的值。

UPDATE tableName SET column1 -= 5 WHERE condition;

乘等于 (*=): 将左侧的值乘以右侧的值,并将结果分配给左侧的值。

UPDATE tableName SET column1 *= 2 WHERE condition;

除等于 (/=): 将左侧的值除以右侧的值,并将结果分配给左侧的值。

UPDATE tableName SET column1 /= 3 WHERE condition;

取模等于 (%=): 将左侧的值除以右侧的值并取余数,结果分配给左侧的值。

UPDATE tableName SET column1 %= 4 WHERE condition;

SQL 逻辑运算符

逻辑运算符用于连接和改变条件语句的逻辑关系。

AND: 如果由 AND 分隔的所有条件都为 TRUE,则为 TRUE

SELECT * FROM tableName WHERE condition1 AND condition2;

OR: 如果由 OR 分隔的任何条件都为 TRUE,则为 TRUE

SELECT * FROM tableName WHERE condition1 OR condition2;

NOT: 如果条件不为 TRUE,则显示记录。

SELECT * FROM tableName WHERE NOT condition;

以上 ANDORNOT 可以结合使用,以满足更复杂的查询需求。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

SQL 算术运算符:加法、减法、乘法、除法和取模的用法的更多相关文章

  1. Divide two numbers,两数相除求商,不能用乘法,除法,取模运算

    问题描述:求商,不能用乘法,除法,取模运算. 算法思路:不能用除法,那只能用减法,但是用减法,超时.可以用位移运算,每次除数左移,相当于2倍. public class DividTwoInteger ...

  2. 3.29省选模拟赛 除法与取模 dp+组合计数

    LINK:除法与取模 鬼题.不过50分很好写.考虑不带除法的时候 其实是一个dp的组合计数. 考虑带除法的时候需要状压一下除法操作. 因为除法操作是不受x的大小影响的 所以要状压这个除法操作. 直接采 ...

  3. 【learning】多项式相关(求逆、开根、除法、取模)

    (首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...

  4. java入门学习(九) 算术运算符

    请大家关注我的博客www.taomaipin.com 运算符在java基础中也占有着举足轻重的位置,我们当然要学会它.java 其实和其他计算机语言一样,基本的算术运算符基本一样,让我们看看 有哪些算 ...

  5. JavaScript:操作符:算术运算符(加减乘除模幂)及其隐式转换数据类型

    加法+ 减法- 乘法* 除法/ 模运算% 幂运算**,即a ** b求的是a的b次方 执行上述运算时,当两个操作数有非数字时,JS会隐式转换为数字,再进行运算: 一些特殊的非数字,会进行如下转换: t ...

  6. MySQL常用运算符:算术运算符、比较运算符、逻辑运算符

    (一)  算术运算符 注意: 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL. div运算符主要是求两个数相除的商 (二)  比较运算符:比较运算符的运算结果为1(条件为真),0 ...

  7. Java SE ---算术运算符

    算术运算符:(加)+,(减)-,(乘)*,(除)/,(求余)%,自增自减 一,算数运算符:当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型.如果参加运算的变量中有整型int ...

  8. java中的i++与++i的区别以及除法、模的用法(基础)

    java中i++与++i的区别: 例如:int i=3; (先运算再赋值)j=++i; i的值先变成4,再赋给j,j的值为4: (先赋值再运算)j=i++; 先将i的值3赋给j,j的值为3,然后i变成 ...

  9. 实验05——java算术运算符减法

    package cn.tedu.demo; import java.math.BigDecimal; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @ver ...

  10. [CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法

    7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...

随机推荐

  1. vmware完全卸载 防止出现各种问题治标不治本

    首先打开系统盘根目录,搜索" VMware ",把搜到的都删掉,去控制面板那里卸载掉VMware 打开管理(右键"我的电脑"),管理打开设备管理器," ...

  2. MYSQL中正则表达式检索数据库

    1.MySQL中使用通配符检索数据库,之外还可以使用正则表达式来检索数据. 使用通配符   '_'  和   '%'的区别如下,   使用通配符的技巧:一般的来说 通配符可以处理数据,但是消耗内存较大 ...

  3. 英语自定义标签 <i:juzi><i:zhuyu>John Smith</i:zhuyu></i:juzi> 主语谓语宾语

    效果 John Smith died in World War Two. John Smith killed three enemy soldiers. <style> i\:juzi { ...

  4. 基于python的opus编解码实力解析

    一 opus   pyogg是一个非常不错的库,用这个做音频的编码和解码非常方便.   二 源码解析   import wave from pyogg import OpusEncoder from ...

  5. 适合新手练习的python开源经典源码

    一 前记 python学习离不开三要素: A.基础知识要熟悉 B. 练习源码要够量 C.实战项目要跟上 二 链接 书本的基础就看几本书就可以了,这里给出源码练习的经典开源源码: 该链接集合了pytho ...

  6. springboot增加slf4j

    参考:https://blog.csdn.net/qq_27706119/article/details/104977666(主要) https://www.liaoxuefeng.com/wiki/ ...

  7. Java-求根号n

    平方,开根号在java中是很简单的,Math.sqrt(double n)或者 Math.pow(double a, double b),求a的b次方.但是我们可以自己想想,这些方法到底是怎么实现的. ...

  8. vim的使用进步

    vim的使用进步 1.如果遇到命令行中无法退出的 狂按esc按键 或者也可以使用v模式下切换一下,之后按esc 保存退出 保存退出--:wq 保存:w 不保存退出:q! i--插入模式 v- 可视化模 ...

  9. Spring Boot学习日记4

    学会pom.xml 分析 打开pom.xml,看看Spring Boot项目的依赖: <?xml version="1.0" encoding="UTF-8&quo ...

  10. webapi通过docker部署到Linux的两种方式

    docker 安装官网 删除docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...