С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311

Добавление строки-дубля в таблицу

02.03.2015, 21:57. Показов 2321. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо заполнить таблицу в БД1 информацией из из другой таблицы в БД2 (структура таблиц разная), поэтому очищаю первую таблицу, а затем используя Insert заполняю ее данными из второй таблицы. Но проблема в том что в таблице из бд2 может добавится только пару записей и из за них приходится удалять 1000 и потом опять добавлять 1002. Как оптимально добавлять данные в таблицу?? (например если в таблице уже есть добавляемая строка, то ничего не делаем, если нет добавляем)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2015, 21:57
Ответы с готовыми решениями:

Добавление строки в таблицу
Привет. на форме есть кнопка и QTableWidget создал коннект connect(ui->pushButton, SIGNAL(clicked()), ui->tableWidget,...

Добавление строки в таблицу
Некорекктно работает добавление строк в таблицу, вот мой код: http://jsfiddle.net/Aa2ek/269/ Не знаю как правильно работать с append.

Добавление строки в таблицу
Добрый день,нужно добавить новую строку в таблицу..работаю с аксесом.. клавиши навигации не катят..!

11
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 09:38
просто сделай поле-идентификатор в БД1 и БД2 одинаковым, и при вставке проверяй, есть ли такое значение в БД2. при этом очищать таблицу совсем не обязательно.
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
03.03.2015, 09:42  [ТС]
Цитата Сообщение от texnix Посмотреть сообщение
просто сделай поле-идентификатор в БД1 и БД2 одинаковым, и при вставке проверяй, есть ли такое значение в БД2. при этом очищать таблицу совсем не обязательно.
структуру одной таблицы (в БД1) я не могу менять и как можно проверить? есть какой нибудь оператор?
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 10:11
fromdd, давай так, ты сюда скопируешь весь твой реальный запрос на insert, а я уже скажу конкретно.
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
03.03.2015, 10:37  [ТС]
Цитата Сообщение от texnix Посмотреть сообщение
fromdd, давай так, ты сюда скопируешь весь твой реальный запрос на insert, а я уже скажу конкретно.
таблица1 из бд1 в которую необходимо добавить
OID|name|format
oid ключевое, не Null, varchar

таблица2 из бд2 которой извлекаю данные для вставки
KOD|level|scname|socrname

Работаю через С# , извлекаю из таблицы2 данные интересующего меня уровня
C#
1
CmdSource.CommandText = "select distinct SCNAME, SOCRNAME from as_socrbase where level in (1, 3, 4, 5)";
затем в цикле через параметры запихиваю это в первую таблицу
C#
1
CmdDest.CommandText = "insert into table1 values(@OID, @Name, @Format)";
oid формирую в цикле
C#
1
2
PostFixOID++;
                CmdDest.Parameters["@OID"].Value = (PrefixOID + String.Format("{0,9:X}", PostFixOID)).Replace(' ', '0');
те вид trt000000001 и тд
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 11:04
fromdd, ну вот, тебе достаточно извлекать ещё и KOD из 2й таблицы, а затем OID формировать на основании кода, например (PrefixOID+KOD)
и при следующей вставке, ты всегда можешь узнать, есть ли или нет такая запись, с данным Кодом в таблице 1.
Тебя же никто не заставляет OID делать обязательно с 1?
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
03.03.2015, 11:16  [ТС]
Цитата Сообщение от texnix Посмотреть сообщение
fromdd, ну вот, тебе достаточно извлекать ещё и KOD из 2й таблицы, а затем OID формировать на основании кода, например (PrefixOID+KOD)
и при следующей вставке, ты всегда можешь узнать, есть ли или нет такая запись, с данным Кодом в таблице 1.
Тебя же никто не заставляет OID делать обязательно с 1?
так нельзя, он должен быть указанного вида trt и цифры

ps допустим если возможен ваш способ, то как делать проверку? можете на примере показать?
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 12:17
fromdd, пример:
C#
1
2
3
4
CmdDest.CommandText = "insert into table1 values(@OID, @Name, @Format) 
where OID <> (select top 1 OID from table1 where OID=@PostOID)"
 
CmdDest.Parameters["@PostOID"].Value = (PrefixOID + KOD)
Примерно так, си шарп не знаю, так что конвертируйте КОД в текст сами, и добавляйте нули спереди, если важно количество символов в trt000000001

можно использовать Merge, но это подлиннее будет, я обычно такой конструкцией обхожусь.
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
03.03.2015, 13:17  [ТС]
Цитата Сообщение от texnix Посмотреть сообщение
fromdd, пример:
Код C#
1
2
3
4
CmdDest.CommandText = "insert into table1 values(@OID, @Name, @Format)
where OID <> (select top 1 OID from table1 where OID=@PostOID)"
CmdDest.Parameters["@PostOID"].Value = (PrefixOID + KOD)
Примерно так, си шарп не знаю, так что конвертируйте КОД в текст сами, и добавляйте нули спереди, если важно количество символов в trt000000001
можно использовать Merge, но это подлиннее будет, я обычно такой конструкцией обхожусь.
C#
1
2
3
4
CmdDest.CommandText = @"insert into AddrProvince 
                                    select @OID, @CountryID, @ProvinceKindID, @Name, @Okato, @Code
                                    where not exists (select OID from AddrProvince where CountryID=@CountryID
                                    and ProvinceKindID=@ProvinceKindID and Name=@Name and Code=@Code)";
как я понимаю такая конструкция аналогична вашей? просто первый раз вижу select с insert вместе в такой конструкции
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 14:22
fromdd, совсем не аналогична, я же проверял только по одному уникальному идентификатору, а вы проверяете по всем полям

Добавлено через 6 минут
и работать ваша конструкция не будет, проверил у себя.
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
03.03.2015, 14:34  [ТС]
Цитата Сообщение от texnix Посмотреть сообщение
и работать ваша конструкция не будет, проверил у себя.
почему не будет??
если подзапрос вернет возвращает строки, то insert не выполнится, те такая строка в таблице есть, если подзапрос ничего не возвращает - срабатывает insert
0
19 / 19 / 12
Регистрация: 09.12.2014
Сообщений: 250
03.03.2015, 14:56
ну вообще да, будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2015, 14:56
Помогаю со студенческими работами здесь

Добавление строки в таблицу
народ извените за ламерский вопрос есть таблица reg и еть форма после заполнения формы нажимаю кнопку и надо чтобы данные из формы...

Добавление строки таблицу БД
Привет! Есть пример из msdn о том как добавить данные в таблицу БД http://msdn.microsoft.com/ru-ru/library/5ycd1034.aspx Но если...

Добавление строки в таблицу
Доброго времени суток! Никак не могу разобраться с добавлением строки в таблицу, имеется база MSSQL , в таблице всего 2 поля ID и NAME ,...

Добавление строки в таблицу access
Привет, подскажите пожалуйста как решить данную задачу: Есть таблица, например ее имя &quot;Товар&quot; ее содержимое выводится в DBGrid....

Добавление строки в таблицу с перезаписью
Здравствуйте, необходима ваша помощь. Такая задача. Имеется таблица с полями, например &quot;Название товара&quot; и &quot;Кол-во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru