标签: raiseerror

回滚和Raiseerror,哪个优先?

我有时会按以下顺序执行以下语句集:

Raiseerror(...)
Rollback;
Run Code Online (Sandbox Code Playgroud)

但我想知道它是否会导致以下相同的效果:

Rollback;
Raiseerror(...)
Run Code Online (Sandbox Code Playgroud)

我了解它们是相同的,并且会产生相同的效果。首先执行回滚,执行后将继续在下一行执行,即Raiseerrror(...)

有人可以确认吗?还是最好以一种具体的方式执行这组语句?

sql sql-server rollback raiseerror sql-server-2008

5
推荐指数
1
解决办法
4265
查看次数

Raiseerror和Concat的消息

我想做这样的事情

raiserror(concat('Error in case @isFishy =', @isFishy, ' @isSmarmy=', @isSmarmy, ' @isTasty = ', @isTasty), 10, 1)
--or
raiserror('Error in case @isFishy =' + @isFishy + ' @isSmarmy=' + @isSmarmy + ' @isTasty = ' + @isTasty, 10, 1)
Run Code Online (Sandbox Code Playgroud)

但它只是不起作用.我该如何做到这一点?我在SQL Server 2005中.

t-sql sql-server raiseerror

4
推荐指数
1
解决办法
7026
查看次数

跳过少数字段的验证

我有模型patient。当patient尝试注册时,他填写字段,例如:nameemail、 ,并且对该字段telephone进行验证。presence我还有另一种表格,医生可以为自己添加患者,该表格只有一个字段name

问题:我可以以某种方式跳过字段验证emailtelephone但保留验证吗name

目前,我有这个行动:

def add_doctor_patient
  @patient = @doctor.patients.new(patient_params)
  if params[:patient][:name].present? and @patient.save(validate: false)
    redirect_to doctor_patients_path(@doctor), notice: 'Added new patient.'
  else
    render action: 'new'
  end
end
Run Code Online (Sandbox Code Playgroud)

nameparams 中存在时,我会跳过验证并保存患者,但是当name不存在时,它只会渲染new操作而不会出现错误,并且 simple_form 不会将字段标记为红色。也许有办法引发错误,或者只是另一种解决方案?

UPD

解决方案:遵循 Wintermeyer 的答案。由于我有关系patient belongs_to: doctor,我可以使用 - hidden_field_tag :doctor_id, value: @doctor.id,并像大家说的那样进行检查,unless: ->(patient){patient.doctor_id.present?}。PS 如果有人使用 devise,我们还应该跳过 和 上的 devise …

validation ruby-on-rails raiseerror

3
推荐指数
1
解决办法
6854
查看次数

DBI:在 eval 中引发错误

这个问题参考了池上的评论:

[...] But if you're going to put an eval around every statement, just use RaiseError => 0. [...]
Run Code Online (Sandbox Code Playgroud)

在这个线程中。

如果我在这种情况下这样RaiseError做,我会得到什么?0

#!/usr/bin/env perl
use warnings;
use 5.10.1;
use DBI;

my $db = 'my_test_sqlite_db.sqlite';
open my $fh, '>', $db or die $!;
close $fh or die $!;

my ( $dbh, $sth );
eval {
    $dbh = DBI->connect( "DBI:SQLite:dbname=$db", "", "", {} );
};
if ( $@ ) { print $@ };

my $table = 'my_sqlite_table';

say …
Run Code Online (Sandbox Code Playgroud)

perl eval exception dbi raiseerror

2
推荐指数
1
解决办法
5769
查看次数