更改多个数据库的表(相同的表名)

5 sql-server alter-table

有没有一种好方法可以为多个数据库(例如 50 个左右)更改表(添加列)。或者对他们来说几乎都是手册?

表都是一样的,添加的列也一样。

谢谢!

Jon*_*gel 2

这是我经常使用的技术来通过动态 SQL 执行此类操作。除了跨数据库“循环”之外,它还有其他应用程序。

现在,您没有说出是哪50 个数据库,所以我只是使用了实例中的所有内容,因为这是很常见的事情:

DECLARE @sql nvarchar(MAX);

SELECT
    @sql = ISNULL(@sql, N'') +
        N'ALTER TABLE ' + QUOTENAME(d.name) + N'.[dbo].[MyTable] ADD C1 int;'
    FROM sys.databases d
    WHERE
        (d.database_id > 4) AND /* No system databases */
        (d.state = 0) AND /* Online only */
        (d.is_distributor = 0) AND /* Not a distribution database */
        (d.is_read_only = 0) AND /* We can write to it */
        /* TODO: filter me more? */;

BEGIN TRANSACTION;
    EXEC(@sql);
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

您可以sys.databases用常量列表、主数据库表中的查询或适合您的场景的任何内容来替换该部分。也没有错误检查,因此您可能需要添加它。

(是的,我故意在上面的代码中留下了语法错误。)