Добавьте первичный ключ к таблице со многими записями

У меня есть таблица в SQL Server 2005, содержащий 10 000 054 записи; эти записи вставляются посредством объемной операции вставки. Таблица не содержит первичный ключ, и я хочу иметь тот. Если я пытаюсь изменить структуру таблицы, добавляя новый столбец, PK, набор как интервал с isidentity, консоль управления дает мне предупреждение:

"Изменения в таблицах с большими объемами данных могли занять значительное количество времени. В то время как изменения сохраняются, данные таблицы не будут доступны".

затем выходная ошибка:

"Не мог изменить таблицу. Тайм-аут истек. Период тайм-аута протек до завершения операции, или сервер не отвечает".

Я хочу PK в свою таблицу.

Как я могу добавить его?

20
задан GEOCHET 13 June 2012 в 12:05
поделиться

5 ответов

Если в Management Studio установить первичный ключ в представлении «Дизайн» (без сохранения), при следующем щелчке правой кнопкой мыши появится параметр «Создать сценарий изменения» - этот параметр также доступен в меню «Конструктор таблиц» вверху.

Предоставляет необработанный SQL (безопасный перенос в транзакцию), который можно скопировать в буфер обмена, передать его для запуска в виде нового запроса (кнопка вверху слева или «Файл» > «Создать» > «Запрос с текущим подключением»), вставить в него, выбрать правую БД и выполнить запрос.

-121--2186217-

Когда вы говорите:

 #include <cstring>

компилятор g++ должен поместить объявления < string.h > он сам включает в std:: И глобальных пространств имен. Выглядит почему-то так, будто не делает этого. Попробуйте заменить один экземпляр strcpy на std:: strcpy и проверьте, устраняет ли это проблему.

-121--1528561-

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

8
ответ дан 29 November 2019 в 23:16
поделиться

Если в Management Studio вы устанавливаете первичный ключ в представлении «Дизайн» (без сохранения), при следующем щелчке правой кнопкой мыши у вас появляется опция «Создать сценарий изменения» - эта опция также доступна в меню «Конструктор таблиц» вверху. .

Предоставляет необработанный SQL (безопасно завернутый в транзакцию), который вы можете скопировать в буфер обмена, использовать его для запуска в качестве нового запроса (кнопка вверху слева или «Файл»> «Создать»> «Запрос с текущим подключением»), вставьте его в , выберите нужную БД и выполните запрос.

27
ответ дан 29 November 2019 в 23:16
поделиться

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

0
ответ дан 29 November 2019 в 23:16
поделиться

В этом случае я бы просто рассматривал атрибут класса так же, как и стандартный атрибут.

$("[class*=main]")
-121--897148-

С помощью $ ("[class ^ = main]") будут выбраны все элементы, для которых имя класса начинается с 'main'. Посмотрите на jQuery docs о селекторах , есть много других вариантов, которые вы можете использовать, например:

  • [class * = main] выберет элементы, имя класса которых содержит 'main'
  • [class ~ = main] выберет элементы, у которых имя класса имеет слово 'main' (разделено пробелами)
  • [class $ = main] выберет элементы, имя класса которых заканчивается на 'main'
-121--897146-

Попробуйте создать сценарий SQL и выдать его из окна SQL Query.

2
ответ дан 29 November 2019 в 23:16
поделиться

Из вашего ответа Дэвиду я понял, что у вас нет подходящего столбца для первичного ключа. В этом случае вы можете добавить идентификатор int в качестве последнего столбца таблицы, массовая вставка продолжит работать.

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

Если вы не можете переполнить стол, вы можете использовать штамп или раствор хассана, чтобы изменить стол.

0
ответ дан 29 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

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