我正在尝试创建一个SQL Server存储过程来使用一些动态SQL处理对表的更新。更新所需的表名存储在一个表中,该表将表id与类别ID相关联。检索到表名并且表id不为null后,我使用动态SQL查询更新表,如下所示:
CREATE PROCEDURE [dbo].[SP_EBS_CustomForms_SetCategoryData]
(@flag int output,
@cat_id int,
@sort int,
@value varchar(50),
@active int,
@enum int)
AS
BEGIN
DECLARE @tbl as varchar(50)
DECLARE @tbl_id as int
DECLARE @sql nvarchar(max)
BEGIN TRY
SET @tbl_id = (SELECT [tbl_id]
FROM [demodata].[dbo].[ebscustomforms_cattable]
WHERE cat_id = @cat_id)
IF @tbl_id IS NOT NULL
BEGIN
SET @tbl = (SELECT table_name
FROM ebscustomforms_enumtable
WHERE tbl_id = @tbl_id)
SET @sql = 'UPDATE ' + @tbl + ' SET [sort_order] = @sort, [value] = @value, [active] = @active WHERE [enum_id] = @enum'
EXECUTE sp_executesql @sql, N'@sort int, @value varchar(50), @active int, @enum int', @sort, @value, @active, @enum
SET @flag = 0
RETURN @flag
END
END TRY
BEGIN CATCH
IF @@ERROR <> 0
BEGIN
SET @flag = 1;
RETURN @flag
END
END CATCH
END
我希望这个存储过程返回一个int值,指示存储过程是成功(0)还是失败(1)更新表。
错误点如下:
@tbl_id
变量为空@tbl
为null或空varchar where [enum_id] = @enum
我注意到当我尝试更新不存在的记录时,程序似乎返回成功,即@flag = 0.但是,我认为应该抛出错误,因为记录不存在。