Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储过程varchar的值超出了其应有的值_Sql Server_Tsql - Fatal编程技术网

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个?会发生什么?