开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 118|回复: 3
打印 上一主题 下一主题
收起左侧

[技术专题] 易语言 执行SQLSERVER 存储过程 带参数简单例子

[复制链接]
结帖率:20% (1/5)
跳转到指定楼层
楼主
发表于 前天 15:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式   广西壮族自治区贺州市
本帖最后由 lzda90 于 2025-7-25 15:41 编辑

例子使用sql server 2008 版本

第一步需要创建好存储过程
在数据库 my_db 创建
[SQL] 纯文本查看 复制代码
USE [my_db]
GO

/****** Object:  StoredProcedure [dbo].[usp_SafeUpdate]    Script Date: 07/25/2025 15:13:53 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- ======================================================================
-- 存储过程: dbo.usp_SafeUpdate
-- 功能: 安全更新表中的记录,支持事务回滚和错误处理
-- 参数:
--   @paramA - 第一个输入参数
--   @paramB - 第二个输入参数
--   @ReturnCode - 输出参数,返回操作结果代码
--   @ReturnMessage - 输出参数,返回操作结果消息
-- 示例调用:
--   DECLARE @Code INT, @Msg NVARCHAR(255);
--   EXEC dbo.usp_SafeUpdate 'Hello', 'World', @Code OUTPUT, @Msg OUTPUT;
--   SELECT @Code AS 返回代码, @Msg AS 返回消息;
-- ======================================================================
CREATE PROCEDURE [dbo].[usp_SafeUpdate]
    @paramA NVARCHAR(100),         -- 输入参数A,不能为空
    @paramB NVARCHAR(100),         -- 输入参数B,不能为空
    @ReturnCode INT OUTPUT,        -- 输出参数:返回状态码(0=成功,非0=错误)
    @ReturnMessage NVARCHAR(255) OUTPUT  -- 输出参数:返回详细消息
AS
BEGIN
    -- 设置执行环境
    SET NOCOUNT ON;                -- 不返回受影响行数,提高性能
    SET XACT_ABORT OFF;            -- 禁用自动事务回滚,手动控制事务
    
    BEGIN TRY
        -- 初始化输出参数
        SET @ReturnCode = 0;       -- 默认返回0(成功)
        SET @ReturnMessage = '操作成功';
        
        -- =============================================================
        -- 步骤1: 参数验证
        -- =============================================================
        IF @paramA IS NULL OR @paramB IS NULL
        BEGIN
            SET @ReturnCode = 50001;        -- 参数验证失败代码
            SET @ReturnMessage = '错误: 参数 @paramA 和 @paramB 均不能为空。';
            
            -- 抛出错误,跳转到CATCH块
            RAISERROR(@ReturnMessage, 16, 1);
            RETURN;
        END;
        
        -- =============================================================
        -- 步骤2: 开始事务
        -- =============================================================
        BEGIN TRANSACTION;
        
        -- =============================================================
        -- 步骤3: 执行业务操作 - 更新表
        -- 操作说明: 将id=1的记录的yingwenming字段更新为 @paramA 和 @paramB 的拼接值
        -- =============================================================
        UPDATE dbo.fanyicidian 
        SET yingwenming = @paramA + @paramB  -- 拼接两个参数作为新值
        WHERE id = 1;                        -- 限定更新id=1的记录
        
        -- =============================================================
        -- 步骤4: 检查操作结果
        -- =============================================================
        IF @@ROWCOUNT = 0
        BEGIN
            SET @ReturnCode = 50002;        -- 未找到记录的错误代码
            SET @ReturnMessage = '错误: 未找到匹配的记录进行更新。';
            
            -- 抛出错误,跳转到CATCH块
            RAISERROR(@ReturnMessage, 16, 1);
            RETURN;
        END;
        
        -- =============================================================
        -- 步骤5: 提交事务(所有操作成功)
        -- =============================================================
        COMMIT TRANSACTION;
        
    END TRY
    BEGIN CATCH
        -- =============================================================
        -- 错误处理块
        -- 功能: 捕获异常,回滚事务,并设置错误返回值
        -- =============================================================
        
        -- 声明变量存储错误信息
        DECLARE @ErrorNumber INT = ERROR_NUMBER();
        DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
        DECLARE @ErrorState INT = ERROR_STATE();
        DECLARE @ErrorLine INT = ERROR_LINE();
        DECLARE @ErrorProcedure NVARCHAR(200) = ISNULL(ERROR_PROCEDURE(), '-');
        
        -- 如果事务未提交,则回滚
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;
            
        -- 设置错误返回值
        SET @ReturnCode = @ErrorNumber;
        SET @ReturnMessage = 
            '错误: 过程 ' + @ErrorProcedure + 
            ' 第 ' + CAST(@ErrorLine AS NVARCHAR(10)) + ' 行: ' + 
            ERROR_MESSAGE();
        
        -- 重新抛出错误,使用完整的RAISERROR语法(兼容SQL Server 2008)
        RAISERROR(
            @ReturnMessage,     -- 错误消息
            @ErrorSeverity,     -- 错误严重性
            @ErrorState         -- 错误状态
        );
    END CATCH
END;    
GO




调用过程语句命令字符串内容存到变量里去执行,这里使用常量,也可以自己定义变量,这里的数据库名称和过程名称需要根据实际填写:

DECLARE @RC int;
DECLARE @paramA nvarchar(100);
DECLARE @paramB nvarchar(100);
DECLARE @ReturnCode int;
DECLARE @ReturnMessage nvarchar(255);

EXECUTE @RC = [my_db].[dbo].[存储过程名称]
   's2yyyys'
  ,'ff2yyy22f'
  ,@ReturnCode OUTPUT
  ,@ReturnMessage OUTPUT;SELECT @RC,@ReturnCode,@ReturnMessage;



  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
局部_存储过程文本型 
i整数型 
局部_记录数整数型 
i2整数型 
局部_字段文本文本型 
局部_结果文本型 
如果 (数据库连接1.连接SQLServer (“127.0.0.1”, “my_db”, “sa”, “密码”))
调试输出 (“数据库链接成功”)
如果 (记录集1.置连接 (数据库连接1))
调试输出 (“记录集1.置连接 成功”)

调试输出 (“记录集1.置连接 失败”)
结束 ()


调试输出 (“数据库链接失败”)
结束 ()

如果 (记录集1.打开 ( #常量1, 1, ))
局部_记录数 = 记录集1.记录数量
如果 (局部_记录数 = -1)
调试输出 (“没有记录”)



记录集1.到首记录 ()
计次循环首 (局部_记录数, i)
局部_结果 = “”
计次循环首 (记录集1.字段数量, i2)
记录集1.读文本 (i2 - 1, 局部_字段文本)
局部_结果 = 局部_结果 + 局部_字段文本 + “ ”
计次循环尾 ()
调试输出 (i, 局部_结果)
如果真 (局部_记录数 > 1)
记录集1.到下一条 ()

计次循环尾 ()

调试输出 (“局部_存储过程 成功”)
调试输出 (“局部_存储过程 成功”)


i支持库列表   支持库注释   
eDB数据库操作支持库
spec特殊功能支持库



结帖率:20% (1/5)

签到天数: 3 天

地板
 楼主| 发表于 昨天 15:09 | 只看该作者   广西壮族自治区贺州市
之前网上搜了好久没有找到例子,后来自己研究测试了好多才可以,有些项目还是很需要数据库过程的,但是网上居然很少例子,所以就发布出来了
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 19 天

板凳
发表于 前天 17:55 | 只看该作者   广东省佛山市
楼主是大佬,牛13
回复 支持 反对

使用道具 举报

结帖率:82% (9/11)

签到天数: 22 天

沙发
发表于 前天 16:23 | 只看该作者   吉林省长春市
很少用储存过程,学习了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表