如何轻松编写数据库中的所有对象脚本以搜索特定列和数据类型

时间:2013-02-20 16:53:16

标签: sql sql-server

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

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

加成: 理想情况下,我希望能够搜索每个数据库的对象,查找并计算“customer_code char(3)”的实例。

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

RedGate做了一个插入管理工作室的免费软件,称为SQL搜索,它为数据库中的所有对象编制索引,并且可以快速找到对象的引用。

我认为这是一个非常方便的工具:

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

答案 2 :(得分: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