2014-08-15 3 views
0

Я новичок в SQL Server. Я хочу создать процедуру, которая должна проверять две таблицы и вставлять разные строки в другую таблицу. Мне нужен пример кода, спасибо заранее. И если строка такая же, не вставляйте else insert.Как сравнить два столбца таблицы и вставить их в новую хранимую процедуру таблицы в SQL Server

Table1, как

username product shippeddate 
Muha  car1  15.08.2014 

Table2 подобен

username product shippedate 
Muha  car1 
+0

Как узнать, какие строки из этих таблиц можно сравнить? Есть общий столбец или что-то еще? –

+0

На самом деле есть текстовый файл, содержащий все данные таблицы, я могу вставить весь файл в таблицу, но мне нужно сравнить существующие записи и вставить разные строки, исходящие из текстового файла. – Muhabutti

+0

Confused - что именно вы пытаетесь делать?? Вы хотите импортировать текстовый файл во временную таблицу и сравнить с таблицей «Таблица1» и вставить те строки, которые еще не существуют в «Таблице1»? Ваш вопрос сказал что-то о * вставьте разные строки в другую таблицу * - что теперь? –

ответ

0

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

вы можете получить SSDT здесь: http://msdn.microsoft.com/en-us/hh297027.aspx После установки перейдите к SQL> Сравнить данные> Новое сравнение данных.

0

Ниже приведен пример использования LEFT OUTER JOIN:

declare @table1 table (username varchar(10), product varchar(10), shippeddate datetime) 
declare @table2 table (username varchar(10), product varchar(10), shippeddate datetime) 

insert into @table1 
select 'Muha','car1','2014-08-15' union 
select 'Steve','car2','2014-08-12' 

insert into @table2 
select 'Muha','car1',null 

insert into @table1 
select t2.* 
from @table2 t2 
left outer join @table1 t1 
    on isnull(t1.username,'') = isnull(t2.username,'') 
    and isnull(t1.product,'') = isnull(t2.product,'') 
    and t1.shippeddate = t2.shippeddate 
where t1.username is null 

select * from @table1 

Вот второй пример использования NOT EXISTS.

declare @table1 table (username varchar(10), product varchar(10), shippeddate datetime) 
declare @table2 table (username varchar(10), product varchar(10), shippeddate datetime) 

insert into @table1 
select 'Muha','car1','2014-08-15' union 
select 'Steve','car2','2014-08-12' 

insert into @table2 
select 'Muha','car1',null 

insert into @table1 
select t2.* 
from @table2 t2 
where not exists (select * from @table1 t1 where isnull(t1.username,'')=isnull(t2.username,'') and isnull(t1.product,'')=isnull(t2.product,'') and t1.shippeddate=t2.shippeddate) 

select * from @table1 

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

0

Даже вы можете использовать оператор «Исключить», чтобы сравнить 2 набора результатов и вставить выходные данные.

Смежные вопросы