在哪里作为IF工作?

时间:2016-11-04 12:50:24

标签: sql-server

我不确定这段代码在做什么。我认为它可以作为If / CASE,或者我错了?

UPDATE #Clasif3 SET
vari_codigo = 0,
vari_nombre = ''
WHERE @ConsVariedad = -9

2 个答案:

答案 0 :(得分:6)

每行 1 评估一次WHERE子句。如果碰巧没有引用行中的任何列并且完全基于确定性函数,那么这意味着当为每行 2 进行求值时它将产生相同的结果,这意味着要么行传递WHERE子句或者它们都会传递。

因此,您可以(逻辑上)将其视为与使用IF保护整个查询类似,区别在于此查询将始终生成结果集(空或完整)而查询如果不进行评估,只有条件执行才会产生结果集。 3

1 这里,只涉及一个表,这很简单“表中每行一次”。如果涉及FROM子句并且有多个表,则在“FROM子句生成的结果集中每行一次”,这可能意味着对于某些行进行多次计算原始源表,具体取决于JOIN条件。

2 在实践中,正如Martin所指出的那样,优化器也应该能够确定这个事实并且只评估一次谓词。

3 在谈论结果集时,我主要考虑的是SELECT个查询。 UPDATE的逻辑是相同的,但我们当然不希望它产生一个结果集,只是表示受影响的行数,以及触发触发器(如果有的话)。

答案 1 :(得分:1)

UPDATE #Clasif3 SET
vari_codigo = 0,
vari_nombre = ''
WHERE @ConsVariedad = -9

# infront表名表示本地临时表,这些表对创建它们的进程是私有的。这里Clasif3是临时表。

vari_codigo = 0,
vari_nombre = ''

是该表中的列。你正在更新这些字段的值

WHERE @ConsVariedad = -9

表示代码更新ConsVariedad = -9

的行

@用于表示sql编码中的变量

希望这有帮助:)