我不确定这段代码在做什么。我认为它可以作为If / CASE,或者我错了?
UPDATE #Clasif3 SET
vari_codigo = 0,
vari_nombre = ''
WHERE @ConsVariedad = -9
答案 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编码中的变量
希望这有帮助:)