在 DBeaver 中创建、修改和执行 SQL 存储过程与函数
介绍如何在 DBeaver 客户端中操作 MS SQL Server 的存储过程和函数。内容包括前提条件检查、创建(含输入输出参数)、执行调用、修改及删除对象的具体 T-SQL 语法示例。通过标准 SQL 脚本实现,无需特殊工具,适用于熟悉基本 SQL 的用户进行数据库逻辑开发与管理。

介绍如何在 DBeaver 客户端中操作 MS SQL Server 的存储过程和函数。内容包括前提条件检查、创建(含输入输出参数)、执行调用、修改及删除对象的具体 T-SQL 语法示例。通过标准 SQL 脚本实现,无需特殊工具,适用于熟悉基本 SQL 的用户进行数据库逻辑开发与管理。

在 DBeaver 等数据库客户端中,可以编写和执行存储过程与函数,因为它们本质上是 SQL 脚本的集合。只需在查询编辑器中编写 CREATE PROCEDURE 或 CREATE FUNCTION 语句并执行即可。
确保:
CREATE PROCEDURE 和 CREATE FUNCTION 的权限。在 MS SQL Server 中,存储过程可以有输入参数(IN)、输出参数(OUT),并且可以返回结果集。
该存储过程根据输入的 CustomerID 返回客户的订单信息。
CREATE PROCEDURE GetCustomerOrders @CustomerID INT AS BEGIN
SET NOCOUNT ON; -- 关闭计数消息
SELECT OrderID, OrderDate, TotalAmount FROM Orders WHERE CustomerID = @CustomerID ORDER BY OrderDate DESC;
END GO
执行成功后,可以在 DBeaver 的数据库导航树中看到新创建的存储过程:数据库 -> 可编程性 -> 存储过程 -> dbo.GetCustomerOrders
创建好之后,可以通过以下方式调用它:
-- 方法一:使用 EXEC
EXEC GetCustomerOrders @CustomerID = 101;
-- 方法二:如果是查询窗口,可以直接输入存储过程名并按执行
GetCustomerOrders 101;
执行后,下方的结果集窗口就会显示该客户的所有订单。
在 MS SQL Server 中,函数分为标量值函数(返回单个值)和表值函数(返回一个表)。
该函数根据输入的订单总金额计算折扣。
CREATE FUNCTION dbo.CalculateDiscount (@TotalAmount DECIMAL(18, 2)) RETURNS DECIMAL(18, 2) AS BEGIN
DECLARE @Discount DECIMAL(18, 2);
IF @TotalAmount > 1000 SET @Discount = @TotalAmount * 0.1; -- 10% 折扣
ELSE IF @TotalAmount > 500 SET @Discount = @TotalAmount * 0.05; -- 5% 折扣
ELSE SET @Discount = 0;
RETURN @Discount;
END GO
SELECT OrderID, TotalAmount, dbo.CalculateDiscount(TotalAmount) AS Discount FROM Orders;
该函数返回指定年份的所有订单,它的返回值是一个表。
CREATE FUNCTION dbo.GetOrdersByYear (@Year INT) RETURNS TABLE AS RETURN (
SELECT OrderID, CustomerID, OrderDate, TotalAmount FROM Orders WHERE YEAR(OrderDate) = @Year
); GO
SELECT * FROM dbo.GetOrdersByYear(2023);
你可以像查询普通表一样使用它,甚至可以在 JOIN 中使用。
如果需要修改已存在的存储过程或函数,可以使用 ALTER 语句。例如:
ALTER PROCEDURE GetCustomerOrders @CustomerID INT, @StartDate DATE = NULL -- 添加一个可选的开始日期参数
AS BEGIN
SET NOCOUNT ON;
SELECT OrderID, OrderDate, TotalAmount FROM Orders WHERE CustomerID = @CustomerID AND (@StartDate IS NULL OR OrderDate >= @StartDate) -- 使用新参数
ORDER BY OrderDate DESC;
END GO
ALTER 的语法与 CREATE 非常相似,只需将 CREATE 替换为 ALTER 即可。
-- 删除存储过程
DROP PROCEDURE IF EXISTS dbo.GetCustomerOrders;
-- 删除函数
DROP FUNCTION IF EXISTS dbo.CalculateDiscount;
注意:DROP 操作会永久删除对象,请谨慎操作。建议在删除前做好备份。
在 DBeaver(或任何其他 SQL 客户端)中操作 MS SQL Server 的存储过程和函数,和在 SQL Server Management Studio (SSMS) 中操作是完全一样的,因为你只是在执行标准的 T-SQL 语句。
核心步骤:
CREATE PROCEDURE 或 CREATE FUNCTION 语句。EXEC (对于存储过程) 或 SELECT (对于函数) 来调用它们。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online