use*_*142 12 sql database ms-access dataset
我有一个使用SELECT INTO SQL语法创建的数据库表.该数据库位于Access中,包含大约500,000行.问题是当我进行连接时,唯一的是整行 - 我想要的是一个自动编号ID字段作为主键.
我目前的代码是这样的:
SELECT INTO new_table
FROM
(SELECT * FROM table a, table b WHERE a.name = b.name)
Run Code Online (Sandbox Code Playgroud)
我希望有一种方法可以在SELECT INTO查询中添加一个子句,这样我就可以添加一个主键并在一次传递中创建表 - 这可能吗?
如果没有,那么仅使用SQL执行此操作的最佳方法是什么?
Jod*_*dyT 14
据我所知,Primary Key在INSERT INTO语句中添加a 是不可能的.但是,您可以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)
Run Code Online (Sandbox Code Playgroud)
在Access中,我不相信您可以在单个语句中完成所需的操作。我认为您需要做的是...
按照问题中的描述创建新表。
像这样添加“自动编号”列:
ALTER TABLE [new_table]添加列[ID] AUTOINCREMENT不为NULL
使您刚刚添加的列成为主键:
ALTER TABLE [new_table]添加约束NewTable_PK主键(ID)
为什么需要同时创建主键和插入呢?
您可以同时创建主键和表,但据我所知,不能在插入时创建。你可以这样做。
create table Tester
(
Id int identity
constraint PK_Id primary key(Id),
description varchar(256)
)
insert into Tester
Select description
from table
Run Code Online (Sandbox Code Playgroud)
或者如果您想确保该表尚不存在并多次运行此脚本,则添加一个删除并创建。临时表“#(something)”可以遵循永久表的许多规则,除了用于代码级移动以及完成后的清理之外。
if object_id('(schema).(tablename)') is not null
drop table (schema).(tablename)
Run Code Online (Sandbox Code Playgroud)
我创造了一颗不断增长的带有“身份”的种子。默认值是从 1 开始并以 1 递增,这可以满足 95% 的简单数据库主键需求。它会自动递增,因此您无需担心。如果您有更多的值,您也可以只插入特定值,例如:
insert into table (col1, col2)
Run Code Online (Sandbox Code Playgroud)
这样就无需插入所有内容,只需插入您想要的列即可。
| 归档时间: |
|
| 查看次数: |
29423 次 |
| 最近记录: |