为什么以红色显示的 SSMS 生成的脚本与存储在系统表中的脚本不同
Why script generated by SSMS shown in red is different from script stored in system tables
为什么 SSMS 生成的脚本以红色显示与存储在系统表中的脚本不同。 请注意查询、查询结果和对象资源管理器中的存储过程名称。
即
所有这些方法都给我相同的脚本
sql_module
object_definition
sp_helptext
但是,当从 SSMS 生成时,右键单击 -> 脚本作为创建或修改会给出不同的脚本。
如何生成不同的脚本。
答案可能令人困惑。
存储过程 getBudgets4programManager2
已重命名(很可能使用 sp_rename
https://msdn.microsoft.com/en-us/library/ms188351.aspx),因此原始定义与新名称不匹配。顺便提一句。请注意,如果发出 ALTER PROCEDURE
语句,存储在元数据中的定义将始终将 DDL 命令更改为 CREATE
。
同时,SSMS 脚本功能不会简单地从元数据中获取定义,因为它具有存储过程的对象表示,它会规范化架构名称和对象名称,它还可能规范化 DDL 命令因此(CREATE
/ALTER
)。请注意,架构显示它已规范化(即 [dbo]
),并且当前名称也已规范化。
至于为什么在重命名对象的同时没有重命名元数据定义。答案不是 100% 清楚,但这样的更改会影响 SQL 服务器引擎中依赖定义的任何功能,包括在 ALTER/CREATE PROCEDURE
上使用 WITH ENCRYPTION
选项以及验证数字签名。
据我所知,两个版本脚本中的其他元素应该保持不变(注释、空格等)。
希望这些信息对您有所帮助。
为什么 SSMS 生成的脚本以红色显示与存储在系统表中的脚本不同。 请注意查询、查询结果和对象资源管理器中的存储过程名称。
即 所有这些方法都给我相同的脚本
sql_module
object_definition
sp_helptext
但是,当从 SSMS 生成时,右键单击 -> 脚本作为创建或修改会给出不同的脚本。
如何生成不同的脚本。
答案可能令人困惑。
存储过程 getBudgets4programManager2
已重命名(很可能使用 sp_rename
https://msdn.microsoft.com/en-us/library/ms188351.aspx),因此原始定义与新名称不匹配。顺便提一句。请注意,如果发出 ALTER PROCEDURE
语句,存储在元数据中的定义将始终将 DDL 命令更改为 CREATE
。
同时,SSMS 脚本功能不会简单地从元数据中获取定义,因为它具有存储过程的对象表示,它会规范化架构名称和对象名称,它还可能规范化 DDL 命令因此(CREATE
/ALTER
)。请注意,架构显示它已规范化(即 [dbo]
),并且当前名称也已规范化。
至于为什么在重命名对象的同时没有重命名元数据定义。答案不是 100% 清楚,但这样的更改会影响 SQL 服务器引擎中依赖定义的任何功能,包括在 ALTER/CREATE PROCEDURE
上使用 WITH ENCRYPTION
选项以及验证数字签名。
据我所知,两个版本脚本中的其他元素应该保持不变(注释、空格等)。
希望这些信息对您有所帮助。