Столбец Inserting между другими столбцами в SQL Server с помощью сценария [дубликат]

Для моего примера это базовый начальный код:

HTML:




jQuery:

$('#myForm').validate({
    rules: {
        field_1: {
            required: true,
            number: true
        },
        field_2: {
            required: true,
            number: true
        },
        field_3: {
            required: true,
            number: true
        }
    }
});

http: //jsfiddle.net/9W3F7


Вариант 1a) Вы можете вытащить группы правил и объединить их в общие переменные.

var ruleSet1 = {
        required: true,
        number: true
    };

$('#myForm').validate({
    rules: {
        field_1: ruleSet1,
        field_2: ruleSet1,
        field_3: ruleSet1
    }
});

http://jsfiddle.net/9W3F7/1


Вариант 1b) Относится к 1a выше, но зависит от вашего уровня сложности, можно выделить правила, которые являются общими для определенных групп и использовать .extend() для их рекомбинации в бесконечном количестве способов.

var ruleSet_default = {
        required: true,
        number: true
    };

var ruleSet1 = {
        max: 99
    };
$.extend(ruleSet1, ruleSet_default); // combines defaults into set 1

var ruleSet2 = {
        min: 3
    };
$.extend(ruleSet2, ruleSet_default); // combines defaults into set 2

$('#myForm').validate({
    rules: {
        field_1: ruleSet2,
        field_2: ruleSet_default,
        field_3: ruleSet1
    }
});

Конечный результат:

  • field_1 будет требуемое число не менее 3.

  • field_2 будет просто необходимым числом.

  • field_3 будет требуемое число не более 99.

http://jsfiddle.net/9W3F7/2


Вариант 2a) Вы можете назначать классы своим полям на основе желаемые общие правила, а затем назначить эти правила для классов. Используя метод addClassRules, мы берем составные правила и превращаем их в имя класса.

HTML:




jQuery:

$('#myform').validate({ // initialize the plugin
    // other options
});

$.validator.addClassRules({
    num: {
        required: true,
        number: true
    }
});

http://jsfiddle.net/9W3F7/4/


Опция 2b) Основное отличие от варианта 2a состоит в том, что вы можете использовать это для назначения правил динамически создаваемым элементам ввода, вызывая метод rules('add') сразу после их создания. Вы могли бы использовать class в качестве селектора, но это не обязательно. Как вы можете видеть ниже, мы использовали селектор подстановочных знаков вместо class.

Метод .rules() должен вызываться в любое время после вызова .validate().

jQuery:

$('#myForm').validate({
    // your other plugin options
});

$('[name*="field"]').each(function() {
    $(this).rules('add', {
        required: true,
        number: true
    });
});

http://jsfiddle.net/9W3F7/5/


Документация:

10
задан Kip 8 June 2009 в 06:14
поделиться

8 ответов

Нет другого способа вставить столбец в таблицу SQL Server "между" существующими столбцами - вам нужно построить временную таблицу и перестроить старую таблицу. Тем не менее, порядок столбцов не имеет значения - вы уверены, что столбцы нужно вставлять по порядку?

Скорее всего, лучше всего просто использовать графический интерфейс, создать сценарий, а затем изменить имя ограничения на что-нибудь разумное. внутри сценария. Вы правы, что числовое имя ограничения не идеально, и позволять SQL Server определять имена ваших объектов - не лучшая практика.

11
ответ дан 28 October 2019 в 05:03
поделиться

Если вы вставляете поле в середину таблицы, вам необходимо удалить текущую таблицу и воссоздать ее заново, что и делает sql server.

Случайные числа обеспечивают уникальное имя ограничения. Если вы сохраните сценарий и запустите его в нескольких базах данных, все они будут одинаковыми. Если вы собираетесь изменять каждый из них через графический интерфейс, то да, скорее всего, они будут разными.

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

5
ответ дан 28 October 2019 в 05:03
поделиться

I just want to point out why you never ever want to use the GUI to insert a column inthe middle of an existing table. When you do that it, creates a speatare new table, moves the data from the old table, renames the old table, renames the new table to the old tablename and drops the old table. This is bad enough ifyou havea small databaset. In a production world where tables can be quite large, you could be locking the users out of access to the table for several hours. Any database design where the order of columns in the database needs to be rearranged when a new column is added is a database headed for disaster. Becasue there are people who insist on doing this though, it is another reason why Select * is also a problem waiting to happen. You really don't want the state to show up in your zip column in a report because someone rearranged the columns in the table and you relied on select * from the column order.

4
ответ дан 28 October 2019 в 05:03
поделиться

Возьмите пример кода и измените его. Если вы хотите, чтобы столбец приземлился в определенном месте, вам нужно будет переопределить / переименовать маршрут временной таблицы. Вы также можете называть индексы и ограничения как хотите.

1
ответ дан 28 October 2019 в 05:03
поделиться

Чтобы удалить каталоги .svn, вы также можете используйте комбинацию 'find ...- prune ...- exec ...' например, MyTable21792984_ColC_DF , который вас справедливо беспокоит (хотя этот конкретный вариант, похоже, является ограничением одного столбца ColC ], такое же именование будет применяться к другим ограничениям).

Хотя эту проблему, вероятно, уже слишком поздно исправлять для вашей текущей схемы, в будущем это поможет вам, если вы будете следовать принципу , всегда называйте свои ограничения - поскольку, как правило, вполне возможно, что вам может потребоваться обращайтесь к ним в будущем, поэтому вы хотите, чтобы имя было полностью под вашим контролем, как и имя любого другого объекта схемы (таблица, столбец и т. д.). В этом случае помогло бы использование предложения типа CONSTRAINT PK_MyTable PRIMARY KEY (ColA, ColB, ColC) в CREATE TABLE . (Если в графическом интерфейсе вы

2
ответ дан 28 October 2019 в 05:03
поделиться

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

Единственное, что здесь раздражает, это выполнение одноразовых запросов с использованием ВЫБРАТЬ * ИЗ ... о базах данных для производства / тестирования / разработки, вручную созданных пользователями и отображающих новый столбец в конце списка столбцов. Однако я считаю, что многие инструменты запросов позволят вам изменить порядок столбцов из своего рода графического интерфейса.

4
ответ дан 28 October 2019 в 05:03
поделиться

Какой инструмент вы используете для создания скрипта. Я использую инструмент сравнения Red-Gate Sql , и он прекрасно работает.

1
ответ дан 28 October 2019 в 05:03
поделиться

Если вам нужен такой столбец посередине, это то, что вам нужно сделать. Я обнаружил, что сценарии, которые он генерирует, довольно хороши и включают только необходимую работу.

Если бы вы, например, добавили столбец в конце, вам нужно было бы только сделать:

ALTER TABLE ADD COLUMN ColX int NOT NULL DEFAULT(0)

И вы бы увидели это в создаваемом им сценарии.

Что касается изменения первичного ключа, его можно отбросить (для всех существующих столбцов) и воссоздать без перезаписи таблицы, но если он сгруппирован или нет, вы, вероятно, получите другой сценарий.

1
ответ дан 28 October 2019 в 05:03
поделиться
Другие вопросы по тегам:

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