我一直在思考重新启动服务后执行计划在 SQL SERVER 中的行为。我知道在缓存内存中的每个查询执行中都存在一个过程来解析、编译和优化请求的查询,应用基于 SQL 中的统计信息和其他参数的执行计划。所有这些执行计划都存储在存储引擎的缓冲池区域中。实际上,每次执行后,这些计划都会更新,让 SQL SEVER 了解新的改进。
这是我的疑问:每次我决定重新启动 SQL 服务时,缓存中的执行计划会发生什么?缓冲池区域中的所有改进都被存储并重新加载以在新的执行中可用?所有执行计划都在重新启动之前重新加载为最新版本,或者相反,SQL 需要创建新的执行计划库以继续改进执行?
拜托,伙计们,如果你能解释这种行为,我将非常感激。非常感谢
我正在尝试运行一个递归更改表,从我的 sys 表中读取几个参数。
DECLARE @AlterCmd NVARCHAR(MAX)
SELECT top 1
@AlterCmd = 'ALTER TABLE [dbo].[table] ALTER COLUMN ' + COLUMN_NAME + ' NVARCHAR(' + CHARACTER_MAXIMUM_LENGTH + ')'
FROM
information_schema.columns
WHERE
table_name = 'table_name' and DATA_TYPE like '%char%'
print @AlterCmd
Run Code Online (Sandbox Code Playgroud)
在此示例代码中,我只想验证命令是否正确,但由于连接中的错误而无法运行它。根据我收到的错误消息:
Msg 245, Level 16, State 1, Line 63
Conversion failed when converting the varchar value ')' to data type int.
Run Code Online (Sandbox Code Playgroud)