如何根据条件满足来运行命令?

时间:2016-02-26 19:47:09

标签: sql sql-server-2008

所以......如果我的BufferPoolCommitMemoryGB变量大于14.99,我试图让我的清除缓存语句运行。我的语法是否正确?提前谢谢!

ActorIdentity(correlationId, actorRef)

我的语法(尤其是IF语句)是否正确?我究竟做错了什么?我有点困惑的原因是,如果GB不高于14.99,我不知道第二个条件陈述应该是什么

提前致谢!

1 个答案:

答案 0 :(得分:0)

这里有一些不同的问题。

首先,IF...块的语法不正确。它应该是

IF @BufferPoolCommittedMemoryGB > 14.99
BEGIN
 DBCC FreeProcCache
 DBCC FreeSystemCache
 DBCC FreeSessionCache
END 

BEGIN不是THEN

SELECT语句中的语法错误会将值插入临时表:

CAST ((bpool_commit_target * 8) / (1024.0 * 1024.0) AS DECIMAL (20, 2)) AS BufferPoolTargetMemoryGB,

(在)之前遗失AS BufferPoolTargetMemoryGB

但是这不会修复查询;在IF块中,您要测试未赋值的变量(@BufferPoolCommittedMemoryGB)的值。您需要在测试之前为@BufferPoolCommittedMemoryGB设置一个值,或者可能(并且我在这里猜测您的意图),直接测试临时表中的值:

IF (SELECT BufferPoolCommittedMemoryGB FROM #TempTable) > 14.99

在不知道您尝试解决的情况的具体情况之后,我倾向于建议刷新整个缓冲池可能不是一个好主意;缓存中可能存在查询计划和数据页面,这些页面最好保留在那里。