我有像这样的SQL查询
if not exists(select RowId from dbo.Cache where StringSearched = @FirstName and colName = 'FirstName')
begin
--some code here
end
如果语句中的StringSearched
的值已经存在于Cache表中,那么上面的if语句的目的不是执行其中的代码段,这意味着它之前已被查找过,因此无需再次进行计算。 if语句中的代码如果被执行则从Table B
返回行的行数,然后将这些行插入到Cache表中以继续维护缓存。无论如何。我只有在ModifiedAt
表的Cache
列最新为ModifiedAt
行的Table B
列时才需要从缓存中选取记录。
注意:我知道我可能需要在subquery
子句中使用where
,但在where
子句中,我需要检查{{1仅ModifiedAt
查询返回的Table B
的{{1}}列。
如何在不使其变得复杂的情况下继续进行?
答案 0 :(得分:1)
您可以在当前查询中使用subquery
以及Where
子句。您没有指定要知道的列,以确定哪些行可以获取值,因此我假设您的tableB
也有StringSearched
和colName
来获取该字符串值max(ModifiedAt)
。
IF NOT EXISTS (SELECT * from dbo.Cache as c WHERE StringSearched = @FirstName
AND colName = 'FirstName'
AND ModifiedAt > (Select MAX(ModifiedAt) FROM tableB as tabB WHERE tabB.RowID = c.RowID ))
BEGIN
--your query
END