为什么由红色显示的SSMS生成的脚本与存储在系统表中的脚本不同

时间:2016-02-24 16:54:41

标签: sql-server sql-server-2005

为什么由红色显示的SSMS生成的脚本与存储在系统表中的脚本不同。 请注意查询,查询结果和对象资源管理器中的存储过程名称。

enter image description here

即。 所有这些方法都给了我相同的脚本

$('.bls').each(function() {
    if($(this).val() > 0){
       $(this).parent('.test1').hide().next('.test2').show();
    }
});

但是,当从SSMS生成时,右键单击 - > “创建”或“修改”脚本提供了不同的脚本。

如何才能生成不同的脚本。

1 个答案:

答案 0 :(得分:1)

答案可能令人困惑。

已重命名存储过程getBudgets4programManager2(很可能使用sp_rename https://msdn.microsoft.com/en-us/library/ms188351.aspx),因此原始定义与新名称不匹配。 BTW。请注意,如果发出CREATE语句,存储在元数据中的定义将始终将DDL命令更改为ALTER PROCEDURE

同时,SSMS脚本功能不会简单地从元数据中获取定义,因为它具有存储过程的对象表示,它将规范化模式名称&对象名称,它也可以相应地规范化DDL命令(CREATE / ALTER)。请注意,架构显示它已标准化(即[dbo]),并且当前名称也已标准化。

为什么在重命名对象的同时不重命名元数据定义。答案并非100%明确,但此类更改会影响依赖于定义的SQL Server引擎中的任何功能,包括使用WITH ENCRYPTION上的ALTER/CREATE PROCEDURE选项以及数字签名的验证。

据我所知,两个版本的脚本中的其他元素应保持不变(注释,空格等)。

我希望这些信息有所帮助。