有没有办法在SQL Server 2008中验证可编程性对象?
我有一个包含~500个可编程对象的数据库,这些对象依赖于其他可编程对象(不仅仅是表)。
如果我进行一些重构,很难找到被更改破坏的其他对象。例如,如果我更改参数计数...
数据库的原始状态:
CREATE FUNCTION [dbo].[GetSomeText]() RETURNS nvarchar(max) AS BEGIN RETURN 'asdf' END
/* uses "GetSomeText()" function */
CREATE FUNCTION [dbo].[GetOtherText]() RETURNS nvarchar(max) AS BEGIN RETURN [dbo].[GetSomeText]() + '-qwer' END
现在我做一些重构(将参数@Num
添加到GetSomeText()
函数):
ALTER FUNCTION [dbo].[GetSomeText](@Num int) RETURNS nvarchar(max) AS BEGIN RETURN 'asdf' + CAST(@Num as nvarchar(max)) END
现在函数GetOtherText()
已被破坏,因为它在没有必需参数的情况下调用GetSomeText()
函数。
有没有办法获取有关此错误的信息?
目前,我将每个可编程性对象编写为ALTER
,运行alter脚本,并检查错误。这种方式看起来太复杂了(并且很难在仅限T-SQL的环境中使用)。
修改
谢谢你的回答!我知道如何获取所有对象的依赖项或列表。
问题在于检查物体。如果我得到依赖项,是否有其他方法来检查有效性而不是运行ALTER
脚本?
答案 0 :(得分:2)
我认为没有办法找到依赖关系。但是,您可以找到引用您正在更改的对象名称的所有内容,如下所示:
select OBJECT_DEFINITION(o.object_id) as objectDefinition, *
from sys.objects o
where o.type in ('P', 'FN')
and OBJECT_DEFINITION(o.object_id) like '%GetSomeText%'
o.type in ('P', 'FN')
将搜索限制为P - 过程和FN - 标量函数。详细了解OBJECT_DEFINITION:http://msdn.microsoft.com/en-us/library/ms176090.aspx
答案 1 :(得分:1)
也许您可以尝试引入一些自动数据库开发人员/单元测试。
对于500个SQL对象,返回并为它们“复古”将是繁重的。最好的方法可能是逐步创建这些测试,因为需要重构/更改现有API /创建新的SQL对象
然后,这些自动化测试可以作为整体持续集成方法的一部分。请注意,给出的示例仍然存在查找现有依赖项的问题。但是一旦有足够的测试覆盖率,测试应该突出显示所引入的任何重大变化。
我已经创建了一个可能有用的测试工具 - 但是还有很多其他工具:
答案 2 :(得分:0)
获得依赖关系的最简单方法之一是使用sp_depends
。 可以使用函数,但您需要确保自己处于正确的数据库环境中:
USE MyDatabase
EXEC sp_depends @objname = N'dbo.FunctionName'
这将向您显示任何对象,无论是对列出的对象具有依赖关系的函数,存储过程,表或视图。
但是,对于跨数据库依赖性,这并不总是准确的,所以请注意。