必须用 codegeex 进行结构化提示与校验式生成来避免 sql server 存储过程的拼写错误、参数遗漏、begin/end 不匹配及动态 sql 注入等问题,而非手写裸 sql。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在 SQL Server 存储过程中避免因拼写错误、参数声明遗漏、BEGIN/END 不匹配或动态 SQL 注入漏洞导致的编译失败或运行时异常,必须借助 CodeGeeX 进行结构化提示与校验式生成,而非直接手写裸 SQL。
用 CodeGeeX 生成带完整参数与错误处理的存储过程
第一步:在 CodeGeeX 输入框中粘贴明确指令,例如:“生成一个 SQL Server 存储过程,名称为 usp_UpdateProductPrice,接收 @ProductID INT 和 @NewPrice DECIMAL(10,2) 两个输入参数,检查 @ProductID 是否存在,若不存在则 RAISERROR 抛出错误,否则更新 Products 表的 UnitPrice 字段,并返回影响行数。”
第二步:生成后,立刻检查输出代码中是否包含 【SET NOCOUNT ON】 —— 缺失会导致应用程序误读结果集,尤其在 .NET 或 Python 中引发“超出了预期的结果集”异常。
第三步:确认 RAISERROR 的严重级别是否为 16(用户可捕获)而非 20(终止连接),并验证错误消息字符串是否用单引号包裹、无中文全角标点。
用 CodeGeeX 校验已有存储过程的语法风险点
方法一:将你写的存储过程全文复制进 CodeGeeX,提示词设为:“逐行分析以下 SQL Server 存储过程,指出所有可能导致编译失败或逻辑错误的位置,包括但不限于:字段名拼写、表别名未定义、OUTPUT 参数未赋值、动态 SQL 中未使用 sp_executesql 而用了 EXEC、缺少 SET NOCOUNT ON。”
CodeGeeX 2.21.0是智谱AI推出的AI编程助手版本,对Inline Chat功能进行了重大优化,包括UI设计升级、支持流式输出以提升响应速度,并新增“查看思路”按钮以便理解代码原理。同时,该版本在编辑器中新增CodeLens控件,支持一键“解释”代码或“添加注释”。目前该工具对个人开发者免费开放。
方法二:对关键分支逻辑单独提问,例如:“这段 IF EXISTS(SELECT 1 FROM sys.tables WHERE name = 'Orders') BEGIN ... END 中,为什么不能用 SELECT * FROM Orders 判断存在性?请给出安全替代写法。”
注意:CodeGeeX 可能忽略临时表作用域问题——它不会主动提醒你在同一个存储过程中先 CREATE TABLE #tmp 再 SELECT * FROM #tmp 是合法的,但若把 SELECT 放在 CREATE 前就会报错。这点必须人工核对执行顺序。
用 CodeGeeX 构建动态 SQL 的安全模板
① 明确要求 CodeGeeX 输出带参数化的 sp_executesql 示例,不要接受含字符串拼接的 EXEC('UPDATE ... WHERE ID = ' + CAST(@id AS VARCHAR)) 这类高危写法。
② 检查生成代码中是否出现两处关键要素:第一处是 N'UPDATE ... WHERE ID = @pid' 中的 Unicode 前缀 N;第二处是 EXEC sp_executesql @sql, N'@pid INT', @pid = @ProductID —— 缺少任一都会导致参数不传入或类型隐式转换失败。
③ 若涉及多条件动态 WHERE,要求 CodeGeeX 使用 CASE 或 CONCAT 避免空条件残留,例如 WHERE 1=1 AND (@name IS NULL OR Name LIKE '%' + @name + '%'),而不是拼接 WHERE Name LIKE '%xxx%' 后再加 AND Category = 'A' 导致语法断裂。










