+1 для всех, кто рекомендовал инструменты RedGate с дополнительной рекомендацией и протестом.
SqlCompare также имеет прилично зарегистрированный API: таким образом, можно, например, записать консольное приложение, которое синхронизирует управляемую папку сценариев источника с базой данных интеграционного тестирования CI по регистрации, так, чтобы, когда кто-то регистрируется в изменении в схеме от их папки сценариев, это было автоматически развернуто наряду с изменением кода приложения соответствия. Это помогает преодолеть разрыв с разработчиками, которые забывчивы о распространении изменений в их локальном дб до общего DB разработки (приблизительно половина из нас, я думаю:)).
протест А состоит в том, что с решением в виде сценария или иначе, инструменты RedGate являются достаточно гладкими, который легко забыть о фактах SQL, лежащих в основе абстракции. При переименовании всех столбцов в таблице SqlCompare не имеет никакого способа отобразить старые столбцы на новые столбцы и отбросит все данные в таблице. Это генерирует предупреждения, но я видел, что люди нажимают мимо этого. Существует общая точка, которую здесь стоит сделать, я думаю, что можно только автоматизировать управление версиями DB и обновить до сих пор - абстракции являются очень текучими.
Попробуйте следующее:
$(document).ready(function(){
$('table').find('tr').each(function(){
$(this).find('td').eq(0).after('<td>cell 1a</td>');
});
});
Ваш исходный код будет добавлять столбец в конец каждой строки, а не между столбцами. Будет найден первый столбец и добавлена ячейка рядом с первым столбцом.
$('table > tr > td:first-child').after( '<td>cell 1a</td>' );
tr> td
выбирает первый уровень td
после tr
и после того, как
вставляет данные вне элемент.