使用SQL将列复制到现有表中

时间:2011-11-09 18:59:23

标签: sql sql-server-2008

我想在 databaseA 中创建一个列,其名称,类型,长度和精度与 databaseB 中的另一列相同。

我需要这样的东西:

INSERT INTO dbo.databaseA(col_name)
SELECT col_name
FROM dbo.databaseB;
GO

但 databaseA 中尚不存在* col_name *。我想在 databaseB 中使用与* col_name *相同的类型创建它。

我也看过:

ALTER TABLE table_name ADD col_name data_type
INSERT INTO dbo.databaseA(col_name)
SELECT col_name
FROM dbo.databaseB;
GO

但我不知道我需要复制的列的data_type。

编辑: **我正在使用SQL Server 2008 R2 **

1 个答案:

答案 0 :(得分:1)

您可以通过查询系统视图从数据库中检索列的数据类型,类似于以下内容:

SELECT c.*, s.name
FROM sys.columns c
INNER JOIN sys.objects o
ON c.object_id = o.object_id
INNER JOIN sys.types s
ON c.user_type_id = s.user_type_id
WHERE o.name = 'B'
AND c.name = 'ColumnName'

您需要连接到DatabaseB,将o.name = 'B'替换为您的表名,并将c.Name = 'ColumnName'替换为您的列名称。

一旦有了数据类型,就需要构造一个DDL语句来将列添加到数据库A中的表中,这类似于以下几行:

ALTER TABLE dbo.MyTableName ADD MyColumnName DATA_TYPE_HERE

表格更新后,您可以构建并执行insert语句:

INSERT INTO DatabaseA.dbo.MyTableName (column list) 
SELECT (column list) 
FROM DatabaseB.dbo.MyTableName

请注意,上述假设两个数据库都位于同一个SQL Server实例上,并且它们都位于dbo架构中。

如果您打算在将来使用此功能,则应添加一些防御性编程步骤,以确保只有在表中尚不存在该列时才添加该列。