有两个数据库(SQL Server 2008)(DataA和DataB),db都有同名的表(Employee)。
员工表在DataA中有15列,DataB中的Employee表只有5列。
我想在DataB中的Employee表中添加缺少的列。 需要一个查询来从DataA中的表中获取列名,并检查该列是否存在于DataB中的Employee表中,然后添加该列。
我们是否需要使用WHILE循环将DataA中所有缺少的列添加到DataB中,或者我们是否有任何选项可以实现此目的?
答案 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