Sql server 2005 如何在5台服务器上的100个数据库中的1000个表中将列从char(2)更改为varchar(5)?

Sql server 2005 如何在5台服务器上的100个数据库中的1000个表中将列从char(2)更改为varchar(5)?,sql-server-2005,Sql Server 2005,我需要拿出一个脚本,在5台服务器上的100个数据库中的1000个表中将列从char(2)更改为varchar(5)。该列的名称中很可能有“Office”。然而: 该列可能有不同的名称,不一定包含“Office”。 有时列被索引,有时不被索引。 有时列是主键,有时不是。 有时有计算列,有时没有。 通常有许多视图依赖于上表。 最好的方法是什么? 我从RedGate的Compare和Dependency Tracker等开始,但有许多独立的表需要更改列。如果您提供更多信息,我可能会给出更具体的答案。也

我需要拿出一个脚本,在5台服务器上的100个数据库中的1000个表中将列从char(2)更改为varchar(5)。该列的名称中很可能有“Office”。然而: 该列可能有不同的名称,不一定包含“Office”。 有时列被索引,有时不被索引。 有时列是主键,有时不是。 有时有计算列,有时没有。 通常有许多视图依赖于上表。 最好的方法是什么?
我从RedGate的Compare和Dependency Tracker等开始,但有许多独立的表需要更改列。

如果您提供更多信息,我可能会给出更具体的答案。也许你可以举几个不同场景的例子

一般的答案是,您需要找到不同的场景,并确定如何手动完成。e、 如果只是更改一个没有依赖项的列,那么ALTER TABLE将为您提供正确的结果。如果您对构建SQL不满意,可以在ManagementStudio中使用表设计器,而不是保存更改,可以选择生成SQL

一旦获得了每个场景的示例SQL,那么就可以使用INFORMATION_SCHEMA表动态地构建一些SQL来查找每个场景,并构建正确的ALTER表作为列之一。e、 g

select 'ALTER TABLE [' + table_schema + '].[' + table_name + '] ALTER COLUMN [' + column_name + '] varchar(5);' FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like '%office%'
由于要跨越多个数据库和服务器,因此可以使用sys.databases或sp_msforeachdb应用于每个数据库。要跨越多个服务器,您可以使用链接服务器,或者因为只有5个服务器,所以您可以应用相同的过程5次


希望SQL Prompt 5将有一个识别列依赖关系的功能。它目前处于早期访问阶段,因此如果您注册,您可以尝试该功能并向我们提供反馈

有关详细信息:

要注册:

同时,您可以始终使用免费SQL搜索工具查找对SQL Server架构中对象的引用:

希望这有帮助