0

摘要: 我需要编写所有数据库存储过程、函数和视图的脚本,以查找“customer_code char(3)”的所有实例。有没有一种简单的方法来编写所有对象的脚本?我有 7 台数据库服务器,每台都有 20-30 个数据库。我不想打开每个数据库并为每个数据库手动生成脚本,这将花费太长时间。

背景: 我们有一个经典问题要解决,类似于 W2K。我们在数据库中有一个代码列,即 char(3)。这填充了随机生成的字母和数字,以创建我们用来识别客户工作的唯一代码。它已经 25 年了,我们估计在我们完全用完组合之前大约有 4-5 个月的时间。我们需要将此列扩展为 varchar(10) 类型。

奖励: 理想情况下,我想要一个解决方案,它还允许我搜索每个数据库的对象,查找和计算“customer_code char(3)”的实例。

4

3 回答 3

0

要在过程、视图和函数中搜索特定文本,您只需搜索 syscomments。这个简单的查询只会搜索一个数据库,但您可以修改以使其遍历服务器上的所有数据库。

DECLARE @sSearchString VARCHAR(30)

SELECT  @sSearchString = 'YMDEFF'

SELECT Distinct
    ss.name,
    so.Name,
    SO.Type
FROM sys.objects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) 
    on SO.object_id = SC.ID
INNER JOIN sys.schemas ss
    ON so.schema_id = ss.schema_id
WHERE SC.Text LIKE ('%'+@sSearchString+'%')
ORDER BY SO.Name
于 2013-02-20T21:59:46.950 回答
0

RedGate 做了一个插入管理工作室的名为 SQL Search 的免费软件,它索引数据库中的所有对象并真正快速地找到对对象的引用。

我发现它是一个非常方便的工具,可以处理这样的事情:

http://www.red-gate.com/products/sql-development/sql-search/

于 2013-02-20T21:44:45.120 回答
0

我开发了 2 个可能对您有所帮助的应用程序:

SMOscript脚本出给定数据库中的所有对象。它还具有搜索功能,可在所有 T-SQL 模块中搜索字符串。

有时在实现更改时,我的做法是有意更改或删除要更改的项目,并让编译器检测依赖关系。在您的场景中,我将重命名该customer_code列并通过调用每个对象来检查所有对象是否依赖于该列。

应用程序checktsql就是这样做的:它遍历视图、SP 等,执行它们中的每一个,并记录错误。您还可以在我的博客上找到纯 T-SQL 解决方案。

于 2013-02-20T21:19:49.070 回答