2016-11-22 1 views
1

У меня есть две таблицы - я хочу иметь возможность выбирать данные из tbl1 и вставлять их в tbl2. Теперь вот сделка - Tbl1 имеет примерно 30 полей. В этой таблице есть три столбца, которые не находятся в tbl2. Вместо указания каждого поля в отдельности, я пытался проверить, есть ли какой-либо возможный путь от меня сделать что-то вроде этого ...Выбор определенных полей из таблицы с помощью SELECT *

Insert into Tbl2 SELECT * (but three fields) from tbl1 where value='value' 

или сделать что-то вроде

Insert Into tbl2 SELECT Field1, Field2 

, но потому, что я буду делайте это для разных таблиц в каждом случае tbl1 будет иметь 3 дополнительных поля, то соответствующий tb2 - я пытаюсь сделать это в простых и чистых возможностях

Любые предложения?

+0

Зачем все эти столбцы, и почему движется вокруг данных? – jarlh

+0

@jarlh необходимо предоставить пользователю возможность для UNDO, что они ранее сделали - – BobSki

+3

Если вы хотите сделать это правильно, укажите столбцы! – jarlh

ответ

3

Этого не может быть сделано, нет синтаксиса для вставки или выбора «всех полей, кроме».

И если бы это было плохой идеей использовать его, по той же причине, что select * в коде приложения - плохая идея. (Предполагая, что определение таблицы не изменится и вам всегда понадобятся все данные.)

1

Вы пытаетесь сделать это?

Пример:

INSERT INTO Customers (CustomerName, Country) 
SELECT SupplierName, Country FROM Suppliers 
WHERE Country='Germany'; 
+0

Ну да, но я уже знаю, как это сделать, пытаясь найти способ не указывать каждое поле. – BobSki

1
declare @sql as nvarchar(2000) 
declare @columns as nvarchar(1000) = '' 
select @columns = @columns + '[' + c.name + '], ' 
from syscolumns c join sysobjects o on c.id=o.id 
where o.name = 'tbl1' and c.name not in ('col1name', 'col2name', 
'col3name') 
set @columns = left(@columns,len(@columns)-2) 
set @sql = N'Insert Into tbl2 (' + @columns + ') values (' + @columns + ')' 
exec(@sql) 

где col1name..col3name являются столбцы, которые вы хотите пропустить

+0

спасибо - я не пытаюсь стать слишком сумасшедшим - я просто указываю все поля и оставляю их пока, как является. ! – BobSki