Запрос на обновление на связанной таблице MySQL от SQL Server

хорошо его красивое и работы трут способ, которым можно использовать cs3 функции как li:hover. мы сделали потерянный проекта в прошлый раз с помощью ie8.js, и он работает отличный способ.

6
задан Bill Karwin 14 January 2010 в 01:04
поделиться

7 ответов

Попробуйте это запрос вместо этого:

update b
set
   Firstname = Voornaam, 
   Middlename = Tussenvoegsel, 
   Surname = Achternaam, 
   email = e-mail 
from
   mysqlserver...subscribers b
   inner join tblkandidaat k on b.kandidaatid = k.kandidaatid
where
   b.list=1
   and (
      b.firstname COLLATE Latin1_General_CI_AI <> k.Voornaam 
      or b.middlename COLLATE Latin1_General_CI_AI <> k.Tussenvoegsel
      or b.surname COLLATE Latin1_General_CI_AI <> k.Achternaam
      or b.email COLLATE Latin1_General_CI_AI <> k.e-mail
   )
  1. . Лучше всего использовать Ansi Joins и правильно отдельных условий соединения от состояния состояний.

  2. Это более читаемо для использования псевдонимов для всех ваших таблиц вместо имени длинных таблиц по всему запросу.

  3. Лучше всего использовать псевдонимы для всех ссылок на колонки вместо того, чтобы оставить их пустыми. Это не только хорошая привычка и делает вещи более четкими, оно может избежать некоторых очень неприятных ошибок в ссылках в Inner-VS-внешние таблицы.

  4. Если производительность также является проблемой: связанный сервер присоединяется иногда отклонения к обработке строки в двигателе данных поставщика данных DB. Я нашел случаи, когда вырвало часть комплекса, присоединяющегося к связанному серверу, в регулярном соединении, за которым следует крест, применяют чрезвычайно уменьшенные ненужные строки, которые выделяются и значительно улучшены производительность. (Это было по сути, проводят поиск закладки, ака не развернул индексное сканирование, за которым следует кластерный индекс, ищите с помощью этих значений). Хотя это может не прекрасно сетку с тем, как работает MySQL, это стоит экспериментировать с. Если вы сможете выполнить любую трассировку, чтобы увидеть фактические запросы, выполняемые на стороне MySQL, вы можете получить понимание для других методов для повышения производительности.

  5. Еще одна идея по улучшению производительности состоит в том, чтобы скопировать удаленные данные локально на таблицу TEMP и добавить столбец ActionRequired. Затем обновите таблицу Temp Temp, чтобы она выглядела так, чтобы положить «u», «i» или «d» в ActionRequired, затем выполните слияние / upsert через связанный сервер простыми equijoins на первичном ключ, используя Actionrequired. Осторожное внимание к возможным условиям гонки, где удаленная база данных может быть обновлена ​​во время обработки, находятся в порядке.

  6. Остерегайтесь ноль ... Все эти столбцы, которые вы сравниваете ненужным?

2
ответ дан 17 December 2019 в 20:34
поделиться

Вы можете попробовать создать вторую таблицу в mysql, выполнив вставку из sql-server в эту пустую таблицу для всех измененных строк и выполнив шаг 3 между двумя таблицами mysql.

0
ответ дан 17 December 2019 в 20:34
поделиться

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

update vi_upd_linkedtable set destination=source where has_change=1

.
0
ответ дан 17 December 2019 в 20:34
поделиться

постарайтесь не использовать подзапрос в вашем утверждении "где". Подзапрос может вернуть более одной строки, и тогда Вы получите ошибку.

0
ответ дан 17 December 2019 в 20:34
поделиться

Q1) Если известно максимальное количество столбцов, можно заполнить пустые записи NaN Кроме того, если все значения числовые, вам действительно нужен столбец «Item #»? Если да, можно использовать только «#», поэтому все данные числовые.

Q2) Самый быстрый способ чтения числовых данных из файла без mex-файлов - csvread. Я стараюсь избегать использования последовательностей в csv-файлах, но если я должен, я использую свою функцию csv2cell:

http://www.mathworks.com/matlabcentral/fileexchange/20135-csv2cell

-121--3894551-

Обычно есть преобразования времени выполнения, так как представления битов в целом не совместимы (за исключением того, что двоичный 0 обычно и 0, и 0,0). Стандарты C и C++ имеют отношение только к значению, а не к представлению и определяют в целом разумное поведение. Помните, что большое значение int обычно не может быть точно представлено в float , а большое значение float не может быть представлено как int .

Поэтому:

Все преобразования по значению, а не по биту узоров. Не беспокойся о узорах.

Не беспокойтесь об энданнесе, так как это вопрос побитового представления.

Преобразование int в float может потерять точность, если целое значение является большим в абсолютном значении; он менее вероятен с двойным , так как двойной более точен и может представлять много более точных чисел. (Детали зависят от того, какие представления система фактически использует.)

Определения языка ничего не говорят о битовых узорах.

Преобразование float в int также является вопросом значений, а не бит узоров. Точная плавающая точка 2.0 будет преобразована в интеграл 2, потому что именно так настраивается реализация, а не из-за битовых узоров.

-121--1672147-

Это снимок в темноте, но попробуйте добавить FOR UPDATE или LOCK IN SHARE МЕТОД в конец запроса на выделение. Это сообщит MySQL, что вы пытаетесь выбрать материал для обновления в рамках транзакции и должны создать блокировку записи на уровне строки во время select , а не во время update .

От 13,2,8,3. ВЫБРАТЬ... ДЛЯ ОБНОВЛЕНИЯ И ВЫБОРА... LOCK IN SHARE РЕЖИМА Блокирование чтения :

SELECT... LOCK IN SHARE MODE устанавливает shared mode lock на считанных строках. A shared mode lock включает другие сеансы для чтения строк, но не для изменить их. Считанные строки являются последние доступные, поэтому, если они принадлежат другая транзакция, которая еще не была committed, считанные блоки до этого момента транзакция заканчивается.

0
ответ дан 17 December 2019 в 20:34
поделиться

Для рядов, в которых имена одинаковы, обновление - это NO-OP.

Вы не сохраняете какую-либо работу, пытаясь отфильтровать строки, где они одинаковы, потому что данные все еще должны сравниться по ссылке. Поэтому я не вижу никакой выгоды в подзапросе.

Поэтому запрос можно упростить много:

update mysqlserver...subscribers
set Firstname = Voornaam, 
  Middlename = Tussenvoegsel, 
  Surname = Achternaam, 
  email = e-mail 
from mysqlserver...subscribers as b join tblkandidaat 
  on b.kandidaatid = tblkandidaat.kandidaatid;
where b.list = 1;

Устранение подзапроса может сделать вашу проблему блокировки. MySQL имеет некоторые проблемы сочетание SELECT и обновление на одной таблице в данном запросе.

0
ответ дан 17 December 2019 в 20:34
поделиться

Попробуйте это. Я написал несколько из них сегодня.

update b
set
   Firstname = Voornaam, 
   Middlename = Tussenvoegsel, 
   Surname = Achternaam, 
   email = e-mail 
from
   mysqlserver...subscribers b
   inner join tblkandidaat k on b.kandidaatid = k.kandidaatid
where
   b.list=1
   and (
      ISNULL(b.firstname,'') COLLATE Latin1_General_CI_AI <> ISNULL(k.Voornaam,'')
      or ISNULL(b.middlename,'') COLLATE Latin1_General_CI_AI <> ISNULL(k.Tussenvoegsel,'')
      or ISNULL(b.surname,'') COLLATE Latin1_General_CI_AI <> ISNULL(k.Achternaam,'')
      or ISNULL(b.email,'') COLLATE Latin1_General_CI_AI <> ISNULL(k.e-mail,'')
   )

Использование ISNULL позволяет обнулить ваши колонки.

0
ответ дан 17 December 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: