将表中的缺失列从一个数据库添加到其他数据库

时间:2016-05-23 07:00:45

标签: sql sql-server sql-server-2008

有两个数据库(SQL Server 2008)(DataA和DataB),db都有同名的表(Employee)。

员工表在DataA中有15列,DataB中的Employee表只有5列。

我想在DataB中的Employee表中添加缺少的列。 需要一个查询来从DataA中的表中获取列名,并检查该列是否存在于DataB中的Employee表中,然后添加该列。

我们是否需要使用WHILE循环将DataA中所有缺少的列添加到DataB中,或者我们是否有任何选项可以实现此目的?

1 个答案:

答案 0 :(得分:3)

请使用以下查询。与SQL Server 2012一起工作正常。我相信这同样适用于SQL Server 2008。

DECLARE @Table TABLE (ID INT IDENTITY(1,1),COLUMN_NAME VARCHAR(50),DATA_TYPE VARCHAR(50))
DECLARE @column_name VARCHAR(50)
DECLARE @datatype VARCHAR(50)
DECLARE @Count INT
DECLARE @Max INT

INSERT INTO @Table
SELECT COLUMN_NAME,DATA_TYPE FROM 
        [Database1].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME ='MyTable'
EXCEPT
SELECT COLUMN_NAME,DATA_TYPE FROM 
        [Database2].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME ='MyTable'

SET @Count =(SELECT MAX(ID) FROM @Table t)
SET @Max =0
WHILE @Count > @Max
BEGIN
    USE [Database2]
    SET @Max = @Max +1
    SET @column_name = (SELECT COLUMN_NAME FROM @Table t WHERE ID = @Max)
    SET @datatype = (SELECT DATA_TYPE FROM @Table t WHERE ID = @Max)
    EXEC('ALTER TABLE MyTable ADD ' +@column_name+' '+@datatype)
END