【发布时间】:2013-11-25 21:25:26
【问题描述】:
我在 SQL Server 2008 中有一个存储过程。这个存储过程的工作非常简单——它在表中插入数据。该表中的一列是 varchar 类型,我对该列的数据验证有疑问。它接受客户端代码传入的任何值——这是预期的。有人告诉我不要在该列中插入“新”。客户端代码神秘地发送“新”作为存储过程参数,存储过程按原样插入该值。我知道这需要由客户端代码处理。但是,由于我负责表数据 - 我计划在存储过程发现“新”时抛出异常。我怎样才能做到这一点?
这是我的存储过程的格式:
ALTER PROCEDURE Object_Save
@Id int = 0 OUTPUT
,@OrderId int
,@OrderNumber varchar(20)
AS
BEGIN TRY
IF @Id = 0
BEGIN
INSERT INTO Table_Order(OrderId, OrderNumber)
VALUES (@OrderID, @OrderNumber)
Set @Id = SCOPE_IDENTITY()
END
ELSE
BEGIN
-- Update
END
END TRY
BEGIN CATCH
exec error_catch
END CATCH
【问题讨论】:
-
您是否考虑过清理无效数据并对列本身添加检查约束?
-
我考虑过约束,但我的经理不允许删除任何记录。我们有这个标记“已删除”,用于跟踪活动/非活动记录。插入后不允许删除。
-
您是说您不想插入“新”这个词吗?你想去掉还是失败?
-
@MuhammedAli - 通过消除不是
int的参数的过程。 -
@MartinSmith 欢呼朋友 :)
标签: sql sql-server sql-server-2008