2013-03-19 14 views
5

Mam tabelę bazy danych, która jest tworzona przy użyciu składni SELECT INTO SQL. Baza danych znajduje się w programie Access i składa się z około 500 000 wierszy. Problem polega na tym, że kiedy łączę, jedyny w swoim rodzaju jest cały wiersz - to, co chciałbym, to pole z identyfikatorem automatycznym jako kluczem podstawowym.Utwórz nową tabelę i dodaj klucz podstawowy, używając SELECT INTO

Kod Obecnie mam to coś w rodzaju:

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

Miałem nadzieję, istnieje sposób, aby dodać klauzulę w moim SELECT INTO kwerendy więc mogę dodać klucz podstawowy i utworzyć tabelę w jednym przejściu - czy to możliwe?

Jeśli nie, jaki jest najlepszy sposób na to, używając tylko SQL?

+0

Wybieranie * z dwóch tabel automatycznie powraca pole łączenia dwukrotnie.Wypróbuj za pomocą odpowiednich pól. –

+0

Potrzebuję wewnętrznego automatu zwiększającego PK w tabeli wyników – user559142

+0

wielkie pytanie, chciałbym móc zrobić to samo. – jhilden

Odpowiedz

0

Jaka jest potrzeba utworzenia klucza podstawowego i jednoczesnego włożenia?

Możesz utworzyć klucz podstawowy i tabelę jednocześnie, ale nie w mojej wiedzy. Możesz to zrobić.

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


insert into Tester 
Select description 
from table 

lub dodać kroplę i tworzyć zbyt jeśli chcesz zapewnić tabeli nie istnieje i uruchomić ten skrypt pęczek. Tabela tymczasowa "# (coś)" może przestrzegać wielu reguł stałych tabel, z wyjątkiem użycia do ruchu na poziomie kodu, a następnie do czyszczenia po zakończeniu.

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

Stworzyłem coraz większe ziarno o "tożsamości". Domyślnie zaczyna się od 1, a inkrementuje o 1, co służy 95% potrzebnych prostych kluczy podstawowych. Zwiększa się automatycznie, więc nie musisz się tym martwić. Można również wstawić tylko określonych wartości, jeśli masz więcej z rzeczami jak:

insert into table (col1, col2) 

Eliminuje to potrzebę wkładania wszystkiego i po prostu być kolumny, które chcesz.

+0

To nie działa. Czy jest on ważny w programie Access? – user559142

+0

Możesz być ograniczony, jak to było zrobione w SQL Management Studio. Prawdopodobnie możesz uciec z tożsamością, ale zakładam, że nie jest to część ograniczenia. – djangojazz

7

Dodanie Primary Key podczas oświadczenia nie jest możliwe, o ile wiem. Możesz jednak dodać kolumnę IDENTITY z automatyczną inkrementacją za pomocą funkcji SQL Server o nazwie IDENTITY().

coś takiego:

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

Musi istnieć sposób na uczynienie tego klucza podstawowego.? – user559142

+0

Niezdefiniowana tożsamość funkcji w wyrażeniu ... – user559142

+0

@ user559142 Ta funkcja jest dostępna w wersji SS2008 i nowszych, a nie SQL Azure (jeszcze?). –

1

W programie Access nie wierzę, że można osiągnąć to, co chcesz w jednym rachunku. Myślę, że musisz ...

  1. Utwórz nowy stół zgodnie z opisem w pytaniu.

  2. Dodaj kolumnę AutoNumber tak:

    ALTER TABLE [NEW_TABLE] Dodaj kolumnę [ID] AUTOINCREMENT NOT NULL

  3. Dodać kolumnę, dodany klucz podstawowy:

    ALTER TABLE [NEW_TABLE] Dodano CONSTRAINT NewTable_PK klucz podstawowy (ID)