2013-03-19 48 views
5

Tôi có bảng cơ sở dữ liệu được tạo bằng cú pháp SELECT INTO SQL. Cơ sở dữ liệu nằm trong Access và bao gồm khoảng 500.000 hàng. Vấn đề là khi tôi tham gia, duy nhất là toàn bộ hàng - điều tôi muốn là trường ID số tự động làm Khóa chính.Tạo bảng mới và thêm khóa chính bằng cách sử dụng SELECT INTO

Mã Tôi hiện đang có là cái gì đó như:

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

Tôi đã hy vọng có một cách để thêm một điều khoản vào SELECT VÀO truy vấn để tôi có thể thêm một khóa chính và tạo bảng trong một đường chuyền - điều này có thể không?

Nếu không, cách tốt nhất để làm điều này bằng cách sử dụng SQL là gì?

+0

Chọn * từ hai bảng sẽ tự động trả về trường tham gia hai lần.Hãy thử nó chỉ với các lĩnh vực bạn cần. –

+0

Tôi cần một PK gia tăng nội bộ tự động trong bảng kết quả – user559142

+0

câu hỏi tuyệt vời, tôi rất muốn có thể làm điều tương tự. – jhilden

Trả lời

0

Cần tạo khóa chính và chèn cùng một lúc là gì?

Bạn có thể tạo khóa và bảng chính cùng lúc, nhưng không thể chèn vào kiến ​​thức của mình. Bạn có thể làm điều này.

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


insert into Tester 
Select description 
from table 

hoặc thêm dấu ngắt và tạo quá nếu bạn muốn đảm bảo bảng không tồn tại và chạy tập lệnh này một nhóm. Một bảng tạm thời '# (cái gì đó)' có thể tuân theo nhiều quy tắc của các bảng thường trực ngoại trừ được sử dụng cho chuyển động cấp mã và sau đó dọn dẹp khi hoàn thành.

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

Tôi đã tạo ra một hạt giống ngày càng tăng với 'danh tính'. Mặc định là bắt đầu từ 1 và tăng thêm 1, phục vụ 95% khóa chính cơ sở dữ liệu đơn giản muốn. Nó tăng tự động, do đó bạn không cần phải lo lắng về nó. Bạn cũng có thể chèn vào chỉ các giá trị cụ thể nếu bạn có nhiều hơn với những thứ như:

insert into table (col1, col2) 

Điều này giúp loại bỏ mọi thứ và chỉ là các cột bạn muốn.

+0

Điều này không hoạt động. Nó có hợp lệ trong Access không? – user559142

+0

Bạn có thể bị giới hạn khi điều này được thực hiện trong SQL Management Studio. Bạn có thể có thể nhận được đi với danh tính nhưng tôi giả định không phải là phần hạn chế. – djangojazz

7

Thêm Primary Key trong tuyên bố INSERT INTO là không thể theo như tôi biết. Những gì bạn có thể làm tuy nhiên, là thêm một cột IDENTITY tự động tăng bằng cách sử dụng chức năng IDENTITY() của SQL Server.

Something như thế này:

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

Phải có cách để làm cho khóa này trở thành khóa chính. – user559142

+0

Nhận dạng chức năng không xác định trong biểu thức ... – user559142

+0

@ user559142 Chức năng này có sẵn trong SS2008 và mới hơn, không phải là SQL Azure (chưa?). –

1

Trong Access Tôi không tin rằng bạn có thể đạt được những gì bạn muốn trong một tuyên bố duy nhất. Điều tôi nghĩ bạn cần làm là ...

  1. Tạo bảng mới như bạn đã mô tả trong câu hỏi.

  2. Thêm cột AutoNumber như thế này:

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

  3. Hãy cột bạn vừa thêm các Primary Key:

    ALTER TABLE [new_table] THÊM TẮT NEWTable_PK KEY CHÍNH (ID)

Các vấn đề liên quan