在SQL Server中修改从Microsoft Access链接的表
问题:
在之前的文章里我们都讨论过了如何在把 Microsoft Access的表链接到SQL Server里,那么如何使用Access来管理修改呢?如果你修改了相应SQL Server表的结构,会怎么样?如果你删除Access里链接的表,SQL Server里的表又会出现什么情况呢?
专家解答:
现在让我们来逐个解答以上的疑问。首先是修改相应SQL Server表的结构的情况。打开Tables(表格)页面,选择要修改的表,右击并选择菜单中的“Design View”选项(设计视图)。
当你试图修改Access中链接表的结构设计时,会出现以下信息:
这是因为所链接表的设计是为SQL Server的基本对象所有,即使用户在基本SQL Server数据库中被授予db_owner角色权限,用户也不能对表作出数据定义修改(DDL变化)。如果你需要对表进行修改,你需要在Microsoft SQL Server里进行修改,然后再重新链接表。
我们将使用Northwind数据库里的Territories表作为实例进行讲解。从SQL Server的视图里该表的当前设计是这样的:
在Access里该表的设计如下:
我们现在向SQL Server表里添加两列:分别是 RegionSupervisorID (int, null) 和TerritorySupervisorID (int, null),如下图所示:
修改之后,Access表还是跟修改之前一样,没有现实变化:
为了在基本SQL表里确认结构改动,你需要利用Microsoft Access的Linked Table Manager。在Access里按照以下路径打开: select Tools/Databases Utilities/Linked Table Manager。
选择你想要更新的表,点击确定。你会收到通知,告诉你所有的表都已成功更新。然后关闭Linked Table Manager,回到Access主界面。
现在我们再从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,运行以下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,通过前面演示的相同步骤进行。
我们这时在Access中查看SubCategories表,就会发现主键已经设置好了。
在Access里删除一个链接表
简单地说,在Microsoft Access里删除一个链接表对基本SQL数据库绝对没有任何影响。不过作为用户,如果通过Microsoft Access操作,没有权限来对基本SQL Server数据库进行DDL修改,也不能直接从Microsoft Access程序里直接删除表。在Access里删除表,只是把链接表删除掉而已。就跟Microsoft SQL Server的链接服务器一样,当你删除链接服务器,你仅仅是删除了链接而已,并没有删除服务器实例。
下面是Microsoft Access显示的信息: