2009-08-02 108 views
1

我有一个名为table1的表,它具有使用'ScreenId'和'ActivityItemId'的复合主键。我添加了一个具有NOT NULL约束的新字段'ProductId'。我想将ProductId添加到复合主键。SQL(access) - 将新字段添加到复合主键

我认为这会工作

db.execute “ALTER TABLE表1 PRIMARY KEY(ScreenId,ActivityItemId,产品编号)”

,但我得到一个错误,我认为这句法仅在创建工作时表。

任何人都可以帮助我与SQL? (我不能使用Visual Basic解决方案在这里顺便说一句,我其实是使用红宝石接口,以便运行SQL,所以它需要只是SQL)

感谢 最大

回答

6

尝试放下你的当前主键,然后创建新的:

ALTER TABLE table1的DROP CONSTRAINT PK_NAME

ALTER TABLE table1的ADD CONSTRAINT PK_NAME PRIMARY KEY(ScreenId,ActivityItemId,产品编号)

+0

谢谢霍克斯 - 但我得到这个错误 OLE错误代码:80004005在Microsoft JET数据库引擎 CHECK约束'主键'不存在。 我正在运行这个 - 也许这不是正确的语法? “ALTER TABLE table1 DROP CONSTRAINT [PrimaryKey]” – 2009-08-02 14:24:03

+1

而不是[主键]使用您的主键名称。 – 2009-08-02 14:50:27

+0

啊我明白了,方括号中的“在这里插入你的变量” \ n 仍然没有运气恐怕 - 我执行此: ALTER TABLE活动DROP约束ScreenId 和我得到这个错误回到 CHECK约束'ScreenId'不存在。 ScreenId绝对是此表中的主键字段之一。 这是一个访问数据库 - 是否有访问可能需要不同的语法? 非常感谢 - 最大 – 2009-08-02 14:59:01

3

想想代理键而不是组合键。每当业务逻辑发生变化时,您都不希望更改架构。

将这些关系作为唯一约束并添加代理键可能是值得的。

-1

您是否尝试过使用设计视图更改主键而不是使用SQL?