我想在 databaseA 中创建一个列,其名称,类型,长度和精度与 databaseB 中的另一列相同。
我需要这样的东西:
INSERT INTO dbo.databaseA(col_name)
SELECT col_name
FROM dbo.databaseB;
GO
但
我也看过:
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 **
答案 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架构中。
如果您打算在将来使用此功能,则应添加一些防御性编程步骤,以确保只有在表中尚不存在该列时才添加该列。