Скопируйте столбец в существующую таблицу с помощью SQL

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

Я хочу создать столбец в базе данных с тем же именем, типом, длиной и точностью, что и другой столбец в базе данных.

Мне нужно что-то вроде этого:

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

Но *col_name * еще не существует в базе данных. Я хочу создать его с тем же типом, что и *col_name * в DatabaseB.

Я также посмотрел на:

 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. Какого поставщика базы данных вы используете? SQL Server, Oracle, MySQL?

2. Вероятно, вам было бы гораздо удобнее просто открыть SQL Server Management Studio, подключиться к базе данных «B», просмотреть таблицу и найти тип данных столбца. Затем подключитесь к базе данных A и вручную добавьте столбец в таблицу. Как только поле окажется в таблице в базе данных A, вы можете написать свою инструкцию insert.

3. Это одноразовая вещь? Или вы ищете универсальное решение?

4. Подписались ли разработчики моделей данных и администраторы баз данных на этот подход? Обычно этим можно управлять с помощью процесса управления изменениями, используя как DDL (ALTER TABLE), так и DML для внесения изменений.

5. Вы на самом деле говорите о двух разных базах данных? Или вы имеете в виду разные таблицы ? Столбцы хранятся в таблицах, так что многое понятно, не так ли?

Ответ №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.

Если вы планируете использовать это в будущем, вам следует добавить несколько шагов защитного программирования, чтобы убедиться, что вы добавляете столбец только в том случае, если он еще не существует в таблице.