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

Откуда:
Сообщений: 2
Здравствуйте.
Нужно скопировать записи в почти идентичную таблицу. В таблицах различаются только имена и порядок следования некоторых полей.
У меня есть информация о различающихся полях, о совпадающих инфы нет.
Дописать недостающие поля руками не вариант, т.к. таблиц много и запросы придется генерить автоматически.


Вот такой запрос не работает, т.к. звездочка подставляет все поля

INSERT tabDest
SELECT
*,
fld111 AS fld111a
fld222 AS fld222b

FROM tabSrc
14 янв 17, 22:25    [20106591]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
И чо вы хотите? Чтобы сервер угадал то, что вы не знаете?
14 янв 17, 22:37    [20106625]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
d63
Member

Откуда:
Сообщений: 2
Угадывать не надо. Большинство полей совпадают по именам, а не совпадающие я укажу. Если бы подстановка по звездочке работала чуть умнее и выдавала только те поля, которые не указаны явно в запросе, то проблемы бы небыло.
Неужели нет обходного пути?
14 янв 17, 22:42    [20106632]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
d63
Если бы подстановка по звездочке работала чуть умнее
... то и разработчики были бы не нужны. А чо, в любой непонятной ситуации фигарь звездочку, она же умная...
14 янв 17, 23:27    [20106739]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
d63
Неужели нет обходного пути?
Написать код, который всё описанное вами будет делать через динамический SQL.
15 янв 17, 00:14    [20106809]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
Ну так системное представление sys.columns вам в помощь
16 янв 17, 11:07    [20109443]     Ответить | Цитировать Сообщить модератору
 Re: Как скопировать записи в др. таблицу, если часть полей неизвестны  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 196
d63
Здравствуйте.
Нужно скопировать записи в почти идентичную таблицу.

Можно допилить скрипт
declare @srcTbl sysname, @dstTble sysname
select @srcTbl = 'srcNameTable', @dstTble = 'dstNameTable'

declare @columns varchar(8000)
select @columns = ''

select  @columns = @columns+case when @columns <>'' then char(13)+', ' else '' end + dest.COLUMN_NAME
	from INFORMATION_SCHEMA.COLUMNS as dest 
	where dest.TABLE_NAME = @dstTble
		and dest.COLUMN_NAME in 
			(select src.COLUMN_NAME 
				from INFORMATION_SCHEMA.COLUMNS as src
				where src.TABLE_NAME = @srcTbl)

exec('insert '+@dstTble+' ('+@columns+') select '+@columns+' from '+@srcTbl)
17 янв 17, 11:10    [20113460]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить