Ubuntu上SQL Server存储过程编写技巧
一 环境与连接要点
二 命名与可读性
三 性能优化要点
四 错误处理与事务控制
五 安全与维护性
六 实用模板与调用示例
CREATE OR ALTER PROCEDURE dbo.usp_Example
@DeptId INT,
@RC INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @RC = 0;
BEGIN TRY
BEGIN TRANSACTION;
-- 示例:参数嗅探稳定写法(先入局部变量)
DECLARE @DeptIdLocal INT = @DeptId;
-- TODO: 基于集合的处理逻辑
-- 例如:INSERT/UPDATE/DELETE ...
COMMIT TRANSACTION;
SET @RC = 1; -- 成功标记
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
-- 记录错误(示例:打印到消息)
DECLARE @ErrMsg NVARCHAR(4000) = ERROR_MESSAGE();
RAISERROR(@ErrMsg, 16, 1);
SET @RC = -1; -- 失败标记
END CATCH
END
GO
DECLARE @Result INT;
EXEC dbo.usp_Example @DeptId = 1, @RC = @Result OUTPUT;
SELECT @Result AS ReturnCode;
-- 查看
EXEC sp_help 'dbo.usp_Example';
-- 修改(推荐 CREATE OR ALTER,若版本不支持则使用 ALTER)
ALTER PROCEDURE dbo.usp_Example
@DeptId INT,
@RC INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
-- 新逻辑
END
GO
DROP PROCEDURE IF EXISTS dbo.usp_Example;
GO