powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
10 сообщений из 60, страница 3 из 3
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021475
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
SerPaNik, Давайте скрипт создания таблицы и заполнения ее данными. И выполняемый запрос.

Скрипт создания таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
/****** Object:  Table [dbo].[PartnerAnalogs_test]    Script Date: 23.11.2020 15:56:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[PartnerAnalogs_test](
	[brand] [nvarchar](50) NOT NULL,
	[article] [nvarchar](50) NOT NULL,
	[a_brand] [nvarchar](50) NOT NULL,
	[a_article] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_PartnerAnalogs_test] PRIMARY KEY CLUSTERED 
(
	[brand] ASC,
	[article] ASC,
	[a_brand] ASC,
	[a_article] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



Скрипт для заполнения таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
USE [Analogs]
GO
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'1 1 1 1-1   1    1', N'LPR', N'09700')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'1-1{1}1-1''1-1', N'LPR', N'09700')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'111111', N'LPR', N'09700')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C** 0 '' 0@0"0 -9 }A )(B&E', N'General Motors', N'96394977')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C0)00*09A-BE', N'FERODO', N'FSB695')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00009ABE', N'JAPAN CARS', N'C00009JC')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00009ABE', N'LPR', N'LPR09700')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00009ABE', N'MANDO', N'MLD08')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00009ABE', N'PMC', N'PLC-008')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00009ABE', N'SANGSIN', N'SA103')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00313ABE', N'JAPAN CARS', N'C00313')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ABE', N'C00313ABE', N'KOREASTAR', N'KBSK-003')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'55501-JD00A', N'NISSAN', N'55044JG00A')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'55501-JD00A', N'NISSAN', N'55044JG00B')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'55501-JD00A', N'NISSAN', N'55501-JD000')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85214-33180', N'TOYOTA', N'85214-33180')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85214-53090', N'TOYOTA', N'85214-53090')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'8521468020', N'TOYOTA', N'85214-52110')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'8521468020', N'TOYOTA', N'85214-68020')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85214-68020', N'TOYOTA', N'85214-68020')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85220-32290', N'TOYOTA', N'85220-32290')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85222-0C021', N'TOYOTA', N'85222-0C030')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85222-0K020', N'TOYOTA', N'85222-0K020')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85222-48040', N'TOYOTA', N'85222-48040')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85223-8H300', N'NISSAN', N'85223-8H300')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'TOYOTA', N'85224-51U00', N'NISSAN', N'85224-51U00')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'НАША СИЛА', N'FL5362', N'ROCKET', N'MD3')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'НАША СИЛА', N'R6 Наша Сила', N'ROCKET', N'R6 ROCKET')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ТОВ "Форма Партс"', N'FP 6408900', N'ТОВ "Форма Партс"', N'FP 6408900')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ЦИАКРИЛАН', N'клей', N'ЦИАКРИЛАН', N'клей гель')
INSERT [dbo].[PartnerAnalogs_test] ([brand], [article], [a_brand], [a_article]) VALUES (N'ЦИАКРИЛАН', N'клей гель', N'ЦИАКРИЛАН', N'клей')


Скрипт, который запускаю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
with t as
(
 select
  b.article_new, a.article,
  row_number() over (partition by b.article_new, a.brand, a.a_article, a.a_brand order by (select 1)) as rn
 from
  PartnerAnalogs_test a cross apply
  (select replace(translate(a.article,'_{!''\/"(@#-$%^&*)} ','###################'),'#','')) b(article_new)
 where
  a.article <> b.article_new
)
merge into t
using (values (1)) s(dummy) on 1 = 1
when matched and t.rn = 1 then
 update
  set article = t.article_new
when matched and t.rn > 1 then
 delete
 -- и посмотрим результаты
 OUTPUT $action AS [Операция], 
                   Inserted.article AS articleNEW,
                   Deleted.article AS articleOLD;


Спасибо, что мучитесь с нубом в SQL :-)
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021482
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerPaNik
Спасибо, что мучитесь с нубом в SQL :-)

Кто никогда не был нубом пусть первый перечислит мне 100 рублей на карту.
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021490
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
пусть первый перечислит мне 100 рублей на карту

А constraint как реализован, который будет отбивать начисления начиная со второго?
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021491
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008
Кто никогда не был нубом пусть первый перечислит мне 100 рублей на карту.
У меня алиби. :)
Просто здесь, полагаю, люди, которые изучают этот вопрос. Мне же в данный момент нужно решить две задачи. Обращаться я уже буду по ADO к серваку и выполнять эти задачи из другой программы, если нужно, конечно, будет. А так в Студио запустил скрипт, почистил, изменил что надо и бд готова к дальнейшей работе. Не факт, что я в ближайшем будущем обращусь сюда за помощью после решения этих двух задач. Поэтому и понимаю людей, которые помогают такому как я. За что и благодарен. Как-то так.
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021498
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerPaNik,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t as
(
 select
  b.article_new, a.article,
  row_number() over (partition by b.article_new, a.brand, a.a_article, a.a_brand order by (select 1)) as rn
 from
  PartnerAnalogs_test a cross apply
  (select replace(translate(a.article,'_{!''\/"(@#-$%^&*)} ','###################'),'#','')) b(article_new)
)
merge into t
using (values (1)) s(dummy) on 1 = 1
when matched and t.rn = 1 and t.article <> t.article_new then
 update
  set article = t.article_new
when matched and t.rn > 1 then
 delete
 -- и посмотрим результаты
 OUTPUT $action AS [Операция], 
                   Inserted.article AS articleNEW,
                   Deleted.article AS articleOLD;
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021508
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, еще раз огромное спасибо! . Вроде делает то, что надо :)
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021511
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
появилась мысль, но не знаю можно ли тут так.
Если объявить переменную
Код: sql
1.
2.
DECLARE @Pole NVARCHAR(50);
SET @Pole = 'a_article';



Можно ли потом как-то вставить её значение в строку, к примеру:
Код: sql
1.
select  b.article_new, a.@Pole

чтобы получилось типа
Код: sql
1.
select  b.article_new, a.a_article


Или здесь так нельзя?
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021901
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SerPaNik, видимо, нельзя :)
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021902
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerPaNik
SerPaNik, видимо, нельзя :)
оно-то можно, через динамический запрос
("склеить" строку запроса в строковую переменную, да и выполнить через exec(@sql) )
но не нужно )
...
Рейтинг: 0 / 0
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
    #40021904
SerPaNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, на "нет" и суда нет. ))
...
Рейтинг: 0 / 0
10 сообщений из 60, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]