Sql server 存储过程varchar的值超出了其应有的值
我的存储过程的Sql server 存储过程varchar的值超出了其应有的值,sql-server,tsql,Sql Server,Tsql,我的存储过程的varchar值可以包含200个字符。当超过200个字符时,我需要事务的raiserror和rollback。 如何做到这一点?我使用SQL Server 我有这个: @employeeid int, @questionid int, @date date, @comment varchar(200), @score int ) as begin begin transaction update contentment set date = @date, comment=
varchar
值可以包含200个字符。当超过200个字符时,我需要事务的raiserror
和rollback
。
如何做到这一点?我使用SQL Server
我有这个:
@employeeid int,
@questionid int,
@date date,
@comment varchar(200),
@score int
)
as
begin
begin transaction
update contentment
set date = @date, comment= @comment, score = @score
where employeeid= @employeeid and questionid= @quesitonid
if @comment> @comment
begin
rollback
raiserror ('error more than 200 characters', 16, 1)
return
end
commit
end
没有必要做任何特别的事情。正如@GSerg所评论的,参数类型是
varchar(200)
,这意味着过程将永远不会获得超过200个字符,因此在过程本身中无法执行任何操作,因此最好从中删除验证
您可以在调用过程本身之前尝试一些验证。最好是在客户端或在另一个过程中完成这项工作
另一个选项是更改定义,采用
varchar(max)
并验证长度(因为它现在允许几乎无限的字符串)。您使用的是哪种dbms?(该代码是特定于产品的。)存储过程看到的第一件事已经是@comment varchar(200)
。不会超过200个字符。截断将在调用您的过程之前发生,并且它不会意识到这一点。但是如果用户插入的字符超过200个?会发生什么?