【发布时间】:2012-11-28 17:43:45
【问题描述】:
如果我使用 Web 应用程序 Web Data Administrator 并编辑存储过程 SQL 查询,它会自行重新编译吗? (SQL Server 和数据库开发方面的新手)
【问题讨论】:
标签: sql sql-server-2005 stored-procedures
如果我使用 Web 应用程序 Web Data Administrator 并编辑存储过程 SQL 查询,它会自行重新编译吗? (SQL Server 和数据库开发方面的新手)
【问题讨论】:
标签: sql sql-server-2005 stored-procedures
MSSQL Server 确实维护了query plans 的缓存,但这与编译后的代码不同。
SQL Server 管理这个缓存,如果它缓存了一个非最优计划,它可能会成为一些痛苦的根源。虽然这在 15 年内发生在我身上的次数不到 5 次(这似乎是特定服务器的问题),最好让 SQL Server 处理它而不是碰它。
您可以通过提供WITH RECOMPILE 选项来强制SQLServer 重新编译。同样的警告也适用,除非你有充分的理由,否则不要。
【讨论】:
WITH RECOMPILE 时会断开连接,认为在 Sproc 的定义中需要让它从缓存中清除该 sproc。我没有说出我所说的正确,但它确实似乎表明你没有说你所说的。正在删除!
SQL 是一种脚本语言,这意味着您编写的代码不会被编译。而是存储在服务器上供以后使用。
编辑存储过程时,可以执行 ALTER 脚本,或 DROP then CREATE 脚本。这会将您的 Web 数据管理(或 SSMS)窗口中的文本发送到服务器,发出一个命令,告诉服务器将此新查询存储为一个过程以供以后使用。
所以,简而言之,是的,如果您执行 ALTER 脚本。
【讨论】:
ALTER(或DROP 然后CREATE)确实会导致重新编译。否则新的sproc不会生效。