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

Откуда: Симферополь
Сообщений: 538
Ребята, помогите пожалуйста.
У меня есть табличка Client_AB_ExportArt, которая заполняется оперативно (количество записей в ней меняется).
Есть архивная табличка Client_AB_ExportArt_arch, которая по своей структуре такая же как оперативная.
На запуск процедуры данные из оперативной таблицы попадают в архивную.
И есть третья табличка Client_AB_DelArt - в которую должны попадать записи, которых нет в оперативной.
Что то у меня все время получается, что третья табличка пустая или я где то ошибаюсь в логике работы.

ALTER procedure [dbo].[Client_AB_ExportXML] 
	(@StockRef integer, @ID_Dev varchar(10))
as

declare @PriceStock integer
--set @StockRef = 68921
set @PriceStock = (select IntField1 from Stock where ID = @StockRef)
--(1) Переносим предыдущие данные в архивную таблицу
delete from Client_AB_ExportArt_arch
insert into Client_AB_ExportArt_arch
select * from Client_AB_ExportArt 

--(2) Текущие данные пишем в оперативную таблицу
delete from Client_AB_ExportArt
insert into Client_AB_ExportArt
select
@ID_Dev as ID,							--ID устройства в учетной системе клиента
a.Code as code,							--Код (номер) товара
LEFT(a.NameArticle1, 18) as ITEM,       --Наименование артикула 18 символов
case @PriceStock                        --В зависимости от ценовой группы
	when 1 then a.price1
	when 2 then a.price2
	when 3 then a.price3
	when 4 then a.price4
	when 5 then a.price5
	when 6 then a.price6
	when 7 then a.price7
	when 8 then a.price8
	when 9 then a.price9
	when 10 then a.price10
end as price,
case a.r_IDVat
	when 11 then 1
	when 5  then 5
	when 2  then 1
	when 0  then 1
end as tax,								--Налоговая группа
0 as single_sale,						--Признак одиночной продажи товара
sum(iop.AvQuantHd) as quantity,			--Количество (запас) товара
a.BarCode as barcode,                   --Штрихкод товара
1         as department,                --Отдел, к которому принадлежит товар
1         as [group],                   --Группа товара
1         as free_price,                --Признак разрешения свободной цены
case u.ID
	when 0 then 0
	when 10020 then 0
    when 10022 then 1 else 0
end	as divisibility,					--Признак делимости товара 0 – неделимый (штучный) товар 1 – делимый (весовой) товар
0 as ctrl_qnt,                          --Признак контроля количественного запаса товара
0 as rqst_qnt,                          --0 не осуществлять запрос на продажу товара
0 as only_ret,                          --Признак разрешения только возврата товара 0 – товар можно продавать и возвращать
0 as disable_ret,                       --Признак запрета возврата товара
0 as cmplx_sale,                        --Признак продажи товаров только при комплексной продаже
0 as [delete],                          --Признак удаления товара 0 – не удалять товар
iop.r_IDArticle,
@StockRef as r_IDStock
from InvObjPast iop inner join Article a on a.ID = iop.r_IDArticle
					inner join Units u   on u.ID = a.r_IDUnits					
where iop.r_IDStock = @StockRef and iop.BlockQuant = 0 and a.Price3 <> 0
group by a.Code, a.NameArticle1, a.BarCode, a.r_IDVat, iop.r_IDArticle,
case @PriceStock
	when 1 then a.price1
	when 2 then a.price2
	when 3 then a.price3
	when 4 then a.price4
	when 5 then a.price5
	when 6 then a.price6
	when 7 then a.price7
	when 8 then a.price8
	when 9 then a.price9
	when 10 then a.price10
end,
case u.ID
	when 0 then 0
	when 10020 then 0
    when 10022 then 1 else 0
end
having sum(iop.AvQuantHd) > 0
order by iop.r_IDArticle

--Вставляем записи в удаляемые артикула
delete from Client_AB_DelArt
insert into Client_AB_DelArt
select code, ITEM, price, quantity, barcode, r_IDArticle, r_IDStock
from Client_AB_ExportArt_arch
where r_IDArticle not in (select r_IDArticle from Client_AB_ExportArt)

select * from Client_AB_ExportArt 
29 июн 12, 10:38    [12792909]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrew_vb1110
И есть третья табличка Client_AB_DelArt - в которую должны попадать записи, которых нет в оперативной.
Что то у меня все время получается, что третья табличка пустая или я где то ошибаюсь в логике работы.

А как можно выбрать из таблицы то, чего там нет ?
29 июн 12, 12:11    [12793567]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 538
Glory
Andrew_vb1110
И есть третья табличка Client_AB_DelArt - в которую должны попадать записи, которых нет в оперативной.
Что то у меня все время получается, что третья табличка пустая или я где то ошибаюсь в логике работы.

А как можно выбрать из таблицы то, чего там нет ?


В таблицу Client_AB_DelArt попадают те записи, которые есть в Client_AB_ExportArt_arch, но нет Client_AB_ExportArt Структуры таблиц Client_AB_ExportArt_arch, Client_AB_ExportArt одинаковые.
Обе таблицы Client_AB_ExportArt и Client_AB_ExportArt_arch с данными.
29 июн 12, 12:19    [12793614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Добрый Э - Эх
Guest
Andrew_vb1110,

except ?
29 июн 12, 12:22    [12793643]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104760
Andrew_vb1110
В таблицу Client_AB_DelArt попадают те записи, которые есть в Client_AB_ExportArt_arch, но нет Client_AB_ExportArt

И как в Client_AB_ExportArt_arch может не быть записей из Client_AB_ExportArt, если по вашим же словам "На запуск процедуры данные из оперативной таблицы попадают в архивную."
29 июн 12, 12:24    [12793655]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Andrew_vb1110,

в Client_AB_ExportArt бывают записи с r_IDArticle IS NULL ?
29 июн 12, 12:26    [12793682]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 538
iap
Andrew_vb1110,

в Client_AB_ExportArt бывают записи с r_IDArticle IS NULL ?


Записей с r_IDArticle IS NULL в табличке Client_AB_ExportArt не бывает
29 июн 12, 12:29    [12793701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
smallserg
Member

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

После отработки процедуры сделайте запрос :
select ta.r_IDArticle  from Client_AB_ExportArt_arch ta 
                            left join Client_AB_ExportArt t 
                          on ta.r_IDArticle = t.r_IDArticle
where t.r_IDArticle is null


Если этот запрос не вернет записей - значит в архивной
таблице нет записей, отсутствующих в оперативной
29 июн 12, 12:32    [12793722]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Andrew_vb1110
iap
Andrew_vb1110,

в Client_AB_ExportArt бывают записи с r_IDArticle IS NULL ?


Записей с r_IDArticle IS NULL в табличке Client_AB_ExportArt не бывает
Замените, всё-таки, NOT IN на NOT EXISTS.
Советую NOT IN(SELECT ...) никогда не использовать.
29 июн 12, 12:39    [12793776]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 538
smallserg, после обработки процедуры запрос не вернул записей
29 июн 12, 12:42    [12793797]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
smallserg
Member

Откуда:
Сообщений: 82
Andrew_vb1110,
Я надеюсь Вы поняли теперь почему третья таблица пуста ?
29 июн 12, 12:54    [12793895]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 538
smallserg, Наверное потому, что таблицы Client_AB_ExportArt и Client_AB_ExportArt_arch с идентичными данными, т.е. в них нет различий.
29 июн 12, 14:37    [12794819]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста найти разницу в двух таблицах  [new]
Andrew_vb1110
Member

Откуда: Симферополь
Сообщений: 538
smallserg
Andrew_vb1110,

После отработки процедуры сделайте запрос :
select ta.r_IDArticle  from Client_AB_ExportArt_arch ta 
                            left join Client_AB_ExportArt t 
                          on ta.r_IDArticle = t.r_IDArticle
where t.r_IDArticle is null


Если этот запрос не вернет записей - значит в архивной
таблице нет записей, отсутствующих в оперативной


А Ваш запрос и вот этот запрос:
select r_IDArticle
from Client_AB_ExportArt_arch
where r_IDArticle not in (select r_IDArticle from Client_AB_ExportArt)


одинаковы?
29 июн 12, 14:41    [12794873]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить