在SQL Server中修改从Microsoft Access链接的表

来源:岁月联盟 编辑:zhuzhu 时间:2008-05-23

  问题:

  在之前的文章里我们都讨论过了如何在把 Microsoft Access的表链接到SQL Server里,那么如何使用Access来管理修改呢?如果你修改了相应SQL Server表的结构,会怎么样?如果你删除Access里链接的表,SQL Server里的表又会出现什么情况呢?

  专家解答:

  现在让我们来逐个解答以上的疑问。首先是修改相应SQL Server表的结构的情况。打开Tables(表格)页面,选择要修改的表,右击并选择菜单中的“Design View”选项(设计视图)。

  SQL Server

 当你试图修改Access中链接表的结构设计时,会出现以下信息:

  SQL Server

  这是因为所链接表的设计是为SQL Server的基本对象所有,即使用户在基本SQL Server数据库中被授予db_owner角色权限,用户也不能对表作出数据定义修改(DDL变化)。如果你需要对表进行修改,你需要在Microsoft SQL Server里进行修改,然后再重新链接表。

  我们将使用Northwind数据库里的Territories表作为实例进行讲解。从SQL Server的视图里该表的当前设计是这样的:

  SQL Server

  在Access里该表的设计如下:

  SQL Server

  我们现在向SQL Server表里添加两列:分别是 RegionSupervisorID (int, null) 和TerritorySupervisorID (int, null),如下图所示:

  SQL Server 

 修改之后,Access表还是跟修改之前一样,没有现实变化:

  SQL Server

  为了在基本SQL表里确认结构改动,你需要利用Microsoft Access的Linked Table Manager。在Access里按照以下路径打开: select Tools/Databases Utilities/Linked Table Manager。

  SQL Server

  选择你想要更新的表,点击确定。你会收到通知,告诉你所有的表都已成功更新。然后关闭Linked Table Manager,回到Access主界面。

  SQL Server

  现在我们再从Access的设计模式里查看链接表,就会发现之前添加的两列。

 在Microsoft Access中添加主键

  如果在初始链接过程中跳过在Access中分配主键的步骤,在链接完成后想要添加主键要怎么办?步骤跟我们刚才示范的DDL修改是一样的过程。举个例子, 我们在SQL Server实例的Northwind数据库里创建一个表名为SubCategories的表,使用以下脚本创建出不带任何索引的表:

  CREATE TABLE dbo.SubCategories
  (
  SubCategoryID INT IDENTITY(1,1) NOT NULL,
  SubCategoryName NVARCHAR(15) NOT NULL,
  Description VARCHAR(50) NULL
  ) ON [PRIMARY]

  我们现在链接Access里的SubCategories表,这时候不设置Unique Record Identifier(因为SQL Server表里没有定义主键)。

  SQL Server

  SQL Server  

  现在我们转换回SQL Server,运行以下T-SQL命令来添加主键。

  LTER TABLE dbo.SubCategories ADD CONSTRAINT
  PK_SubCategories PRIMARY KEY CLUSTERED (SubCategoryID)
  WITH
  (
  STATISTICS_NORECOMPUTE = OFF,
  IGNORE_DUP_KEY = OFF,
  ALLOW_ROW_LOCKS = ON,
  ALLOW_PAGE_LOCKS = ON
  )
  ON [PRIMARY]

  完成之后,我们打开Linked Table Manager,通过前面演示的相同步骤进行。

 SQL Server

  我们这时在Access中查看SubCategories表,就会发现主键已经设置好了。

  SQL Server

  在Access里删除一个链接表

  简单地说,在Microsoft Access里删除一个链接表对基本SQL数据库绝对没有任何影响。不过作为用户,如果通过Microsoft Access操作,没有权限来对基本SQL Server数据库进行DDL修改,也不能直接从Microsoft Access程序里直接删除表。在Access里删除表,只是把链接表删除掉而已。就跟Microsoft SQL Server的链接服务器一样,当你删除链接服务器,你仅仅是删除了链接而已,并没有删除服务器实例。

  下面是Microsoft Access显示的信息:

  SQL Server