Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Копирование структуры таблицы


Автор: Pakshin A. S. 15.6.2011, 16:11
Имеется некая таблица произвольной структуры. Необходимо скопировать данные из открытой таблицы в новую таблицу. Проблем с копированием естественно нет, но надо создать новую таблицу - полную копию текущей. Как можно узнать структуру таблицы, чтобы записать правильные типы полей в Create Table? Может есть встроенный механизм копирования таблицы?

На входе имеется только один TDataSet с открытой таблицей, где есть все поля и данные.

Тип используемой БД - MSSQL.

Добавлено через 11 минут и 33 секунды
Как вариант: пробежаться по Fields открытого DataSet и сгенерить запрос.  Где взять таблицу соответствия типа TFieldType и типов данных полей в MSSQL?

Автор: Vas 15.6.2011, 17:20
Цитата(Pakshin A. S. @  15.6.2011,  16:11 Найти цитируемый пост)
Где взять таблицу соответствия типа TFieldType и типов данных полей в MSSQL?

По идее должны быть данные о полях в системных таблицах, как MSSQL их узнает.
Вот в инете нарыл
Цитата

Мне кажется еще проще использовать INFORMATION_SCHEMA (INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.TABLES и т.д.) или системные ХП (sp_colums, sp_tables ...). Они выдадут ту же информацию, но не в всей кучей сразу, а только то, что попросишь.

Автор: Pakshin A. S. 15.6.2011, 17:27
INFORMATION_SCHEMA - отличная штука! Удобно юзать... буду пробовать. smile

Автор: Данкинг 15.6.2011, 18:12
А в SQL-сервер нет оператора вроде фоксового copy structure ?

Автор: Akella 16.6.2011, 15:37
Код

create table sometablename like some_other_table_name
create table sometablename as (select * from some_other_table_name)


Цитата

I believe 'SELECT * into new_table from table1' will copy both structure and data as well.

Автор: Данкинг 16.6.2011, 15:44
Цитата(Akella @  16.6.2011,  16:37 Найти цитируемый пост)
I believe 'SELECT * into new_table from table1' will copy both structure and data as well.

Так если с данными скопировать - то понятное дело.

Добавлено через 35 секунд
А:
Цитата(Pakshin A. S. @  15.6.2011,  17:11 Найти цитируемый пост)
Необходимо скопировать данные из открытой таблицы в новую таблицу. Проблем с копированием естественно нет, но надо создать новую таблицу - полную копию текущей.

Ну, тогда понятно. smile 

Автор: DimW 17.6.2011, 10:52
Цитата(Данкинг @  16.6.2011,  15:44 Найти цитируемый пост)
Так если с данными скопировать - то понятное дело.


без данных:
Код

create table sometablename as (select * from some_other_table_name where 1=0)



Автор: Pakshin A. S. 17.6.2011, 16:17
Спасибо за варианты решения проблемы!

Автор: Данкинг 17.6.2011, 19:13
Цитата(DimW @  17.6.2011,  11:52 Найти цитируемый пост)
where 1=0

Логично. smile Я помню, несколько лет назад у нас один товарищ подобным образом копировал таблицы на фоксе:
Код

set filter to dele() &&ставим фильтр на помеченные записи, которых нет
copy to NEW && копируем в новую таблицу записи по фильтру

 smile 

Автор: DimW 4.8.2011, 15:59
Цитата(Данкинг @  17.6.2011,  19:13 Найти цитируемый пост)
Логично. 

Если логично, тогда к чему эта тупка в виде десятка постов выше?!...  

Автор: Данкинг 6.8.2011, 19:42
Цитата(DimW @  4.8.2011,  16:59 Найти цитируемый пост)
Если логично, тогда к чему эта тупка в виде десятка постов выше?!...   

Ты от меня конкретного ответа ожидаешь или это просто мысли вслух? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)