2013-03-19 3 views
5

У меня есть таблица базы данных, которая создается с использованием синтаксиса SELECT INTO SQL. База данных находится в Access и состоит из примерно 500 000 строк. Проблема в том, что когда я делаю соединение, уникальная - это вся строка - я бы хотел, чтобы это поле с автоматическим номером в качестве основного ключа.Создайте новую таблицу и добавьте первичный ключ, используя SELECT INTO

Код настоящее время у меня что-то вроде:

SELECT INTO new_table 
FROM 
(SELECT * FROM table a, table b WHERE a.name = b.name) 

Я надеялся, что есть способ, чтобы добавить пункт в мой SELECT INTO запроса, так что я мог бы добавить первичный ключ и создать таблицу в один проход - Это возможно?

Если нет, то как лучше всего это сделать, используя только SQL?

+0

Выбор * из двух таблиц автоматически возвращает поле объединения дважды.Попробуйте это только с полями, в которых вы нуждаетесь. –

+0

Мне нужна внутренняя автоматическая добавочная ПК в таблице результатов – user559142

+0

Отличный вопрос, я бы с удовольствием мог сделать то же самое. – jhilden

ответ

0

Что необходимо для создания первичного ключа и вставки в одно и то же время?

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

create table Tester 
(
Id int identity 
    constraint PK_Id primary key(Id), 
    description varchar(256) 
) 


insert into Tester 
Select description 
from table 

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

if object_id('(schema).(tablename)') is not null 
    drop table (schema).(tablename) 

Я создал постоянно увеличивающееся семя с «личностью». Значение по умолчанию - начинаться с 1 и увеличиваться на 1, что соответствует 95% простого первичного ключа базы данных. Он автоматически увеличивается, поэтому вам не нужно беспокоиться об этом. Вы также можете вставить в только конкретные значения, если у вас есть больше с такими вещами, как:

insert into table (col1, col2) 

Это устраняет необходимость вставить все, и просто быть столбцы, которые вы хотите.

+0

Это не работает. Действительно ли это в Access? – user559142

+0

Возможно, вы можете быть ограничены, как это было сделано в SQL Management Studio. Вы, вероятно, можете уйти с личностью, но я не принимаю часть ограничения. – djangojazz

7

Добавление Primary Key во время инструкции INSERT INTO невозможно, насколько мне известно. Однако вы можете добавить столбец IDENTITY, который автоматически увеличивается с помощью функции SQL Server IDENTITY().

Что-то вроде этого:

SELECT 
    ID = IDENTITY(INT, 1, 1), 
    col1, 
    col2 
INTO new_table 
FROM (SELECT * FROM table a, table b WHERE a.name = b.name) 
+1

Должен быть способ сделать это первичным ключом.? – user559142

+0

Неопределенное идентификатор функции в выражении ... – user559142

+0

@ user559142 Эта функция доступна в SS2008 и более поздних версиях, а не в SQL Azure (пока?). –

1

В Access Я не верю, что вы можете сделать то, что вы хотите в одном операторе. Я думаю, что вам нужно будет ...

  1. Создайте новый стол, как описано в вопросе.

  2. Добавить столбец AutoNumber так:

    ALTER TABLE [new_table] ADD COLUMN [ID] AUTOINCREMENT NOT NULL

  3. сделать столбец добавленном Первичный ключ:

    ALTER TABLE [new_table] ADD CONSTRAINT NewTable_PK ПЕРВИЧНЫЙ КЛЮЧ (ID)