Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скопировать одну таблицу в другую  [new]
maxterbear
Member

Откуда:
Сообщений: 221
Как скопировать одну таблицу в другую?
я пробовал так

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Employee'


но столкнулся с тем, что запрос иногда не работает из-за того что "последовательность" колонок разная ( то есть структура идентичная, но запрос не работает (
5 янв 12, 15:33    [11862189]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
maxterbear,

select ... into ... from ...
5 янв 12, 15:36    [11862203]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
maxterbear
Member

Откуда:
Сообщений: 221
ой блин не то ) insert into dbo.base1.tb_copy select * from dbo.base2.tb вот єтот запрос )

а вручную перебирать поля єто не православно, потому что их около 200
5 янв 12, 16:01    [11862279]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
maxterbear
а вручную перебирать поля єто не православно, потому что их около 200

И откуда тогда сервер узнает, какое полю какому соответствует в этих двух таблицах ?
5 янв 12, 16:08    [11862296]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
maxterbear
Member

Откуда:
Сообщений: 221
автор
И откуда тогда сервер узнает, какое полю какому соответствует в этих двух таблицах ?


Сервер же знает поля одной таблицы и может найти поле с таким же названием, куда нужно вставлять записи...
5 янв 12, 16:13    [11862315]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
maxterbear
автор
И откуда тогда сервер узнает, какое полю какому соответствует в этих двух таблицах ?


Сервер же знает поля одной таблицы и может найти поле с таким же названием, куда нужно вставлять записи...
Сервер сам ничего не делает, если его не просят!
Только по запросу! Потому и "SQL" называется...
5 янв 12, 16:21    [11862337]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
maxterbear
Сервер же знает поля одной таблицы и может найти поле с таким же названием, куда нужно вставлять записи...

Да что вы говорите. А если полей меньше или больше, то сервер наверное должен добавить/удалить эти поля ?
5 янв 12, 17:01    [11862427]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
maxterbear
Member

Откуда:
Сообщений: 221
Да что вы говорите. А если полей меньше или больше, то сервер наверное должен добавить/удалить эти поля ?


как опциональный вариант было бы неплохо, а что здесь такого сложного?
5 янв 12, 19:36    [11862833]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
maxterbear
как опциональный вариант было бы неплохо, а что здесь такого сложного?
Ну да, сначала плодим таблицу на 200 столбцов, а потом удивляемся, что с ней неудобно работать...

ЗЫ: Откройте для себя возможность в SSMS перетаскивать все столбцы таблицы в редактор.
5 янв 12, 19:51    [11862879]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
maxterbear,

А SSIS не пробовали? Он умеет угадывать, куда какие столбцы вставлять.
5 янв 12, 21:13    [11863103]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
maxterbear
а вручную перебирать поля єто не православно, потому что их около 200
Мышкой поля перетащите.
maxterbear
Да что вы говорите. А если полей меньше или больше, то сервер наверное должен добавить/удалить эти поля ?

как опциональный вариант было бы неплохо, а что здесь такого сложного?
Многие клиентские приложения (в т.ч. и входящие в состав сиквела), умеют многое из этого, но в состав ядра субд такого нет.

Вот, например, в C# при копировании объекта класс-приёмник не модифицируется с добавлением новых методов и свойств, хотя в этом тоже ничего сложного нету.
6 янв 12, 13:29    [11864469]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
valetik
Member

Откуда:
Сообщений: 5
maxterbear,

tbl1 и tbl2 отличаются только(!) порядком следования столбцов. Копируем из 1 во 2-ю:

declare @cols varchar(max)
declare @sql nvarchar(max)

set @cols = ''
SELECT @cols = @cols + COLUMN_NAME + ',' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tbl1' order by COLUMN_NAME
set @cols = left(@cols, len(@cols) - 1)

set @sql = 'INSERT INTO tbl2 (' + @cols + ') (SELECT ' + @cols + ' FROM tbl1)'
exec sp_executesql @sql
13 янв 12, 17:42    [11901470]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3755
Jovanny
maxterbear,

А SSIS не пробовали? Он умеет угадывать, куда какие столбцы вставлять.

иногда правда не угадывает, но это мелочи
13 янв 12, 18:40    [11901920]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
user89
Member

Откуда:
Сообщений: 2083
maxterbear
как опциональный вариант было бы неплохо, а что здесь такого сложного?

Вот вариант когда в двух таблицах разное число полей. Добавление идет по совпадающим именам:
declare @col nvarchar(max), @sql nvarchar(max)

select @col = isnull(@col + '], [', '') + column_name from 
(
  select column_name from information_schema.columns where table_name = 'table1' 
  intersect
  select column_name from information_schema.columns where table_name = 'table2'
) t

select @col = '[' + @col + ']'

set @sql = 'insert into table2 (' + @col + ') (select ' + @col + ' from table1)'
print(@sql)
exec(@sql)
13 янв 12, 18:55    [11902008]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать одну таблицу в другую  [new]
GlebZ
Member

Откуда: USA
Сообщений: 286
maxterbear
автор
И откуда тогда сервер узнает, какое полю какому соответствует в этих двух таблицах ?


Сервер же знает поля одной таблицы и может найти поле с таким же названием, куда нужно вставлять записи...

А откуда сервер знает, что два поля с одинаковым именем это одно и тоже?
13 янв 12, 19:16    [11902131]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить