修改SQLServer函数名容易引起的问题分析

修改SQLServer函数名容易引起的问题分析
1。问题
今天,有一个奇怪的问题:函数定义名称的sp_helptext XXX查询不同,函数名和sp_helptext实际上是查询sys.all_sql_modules系统视图。查询该视图的定义域,并发现它是有sp_helptext.are等机制在系统视图缓存一样吗还是虫子对于第一个问题,当时情况紧急,没有时间来找出是否有任何。第二个问题,我不认为什么是可能的,SQL Server开发今天(的SQL 2016准备推出,正式版我用的是SQL Server 2008 R2环境,称为SP3),是已经有很成熟的系统,即使错误不是我水平的人可以发现,必须在哪里我错在哪里了。所以就转向了数据库技术交流群,并很快大上帝回答重命名问题。我立刻觉得这个功能。在一周前,因为测试的需要,我改变了原来的函数名通过SSMS,SQL Server不sys.all_sql_modules视图的定义字段更新因为重命名。所以函数定义,已经编译与sys.all_sql_modules系统查看函数定义不一致。
2。关注和分析
做个测试来重现这个问题。首先,创建一个简单的测试功能,dbo.ufn_test_1。

使用adventureworks2008r2;

如果object_id(n'dbo。ufn_test_1)是无效的
开始
dbo.ufn_test_1拖放功能;
结束

创建函数(dbo。ufn_test_1)
返回char(1)
作为
开始
返回(F);
结束
code-1:创建一个函数dbo.ufn_test_1
在这一点上,使用sp_helptext和sys.all_sql_modules查询,一切正常。

执行sp_helptext ufn_test_1 } { dbo;

选择object_id('dbo。ufn_test_1)作为,*
从sys.all_sql_modules
在object_id } = { object_id('dbo。ufn_test_1);
code-2的定义:查询功能dbo.ufn_test_1

该图的定义:查询功能dbo.ufn_test_1
直接更名为dbo.ufn_test_2在SSMS。

图2:修改函数名
Then query the definition of the function dbo.ufn_test_2.In this way, a function that has been compiled is incompatible with the function definition in the view!如果你更新生产服务器通过对sp_helptext和sys.all_sql_modules查询的定义,会有一个问题。

三.解决方案和结论
解决办法很简单,而且功能可以重建。如果你使用SSMS右键修改(修改)或生成脚本功能菜单,不会有问题的。同样的问题和解决方案也适用于存储过程。

结论:
(1)尽量不要修改对象的名称。如果你真的想修改它,那么就做它,如果它是一个表,包含了大量的数据,那么它会更麻烦。即使修改表名也不会显示为函数或存储过程问题,但修改表名涉及应用程序
(2)尝试修改或利用SSMS右键菜单生成对象的定义。但如果函数或存储过程太多,就会觉得sp_helptext和sys.all_sql_modules将更方便。查询结果应仔细检查的对象的名称是相同的。在这种情况下,有sp_helptext一些限制,它可以是指在SQL中的局限性和印刷和sp_helptext扩展

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部