社区
MS-SQL Server
帖子详情
请问一下,数据库的外键信息存在哪张系统表中?
lgl2004
2005-04-21 09:07:14
请教熟悉sql server的高手,一个数据库的外键信息存储在哪张表里?
谢谢!
...全文
355
3
打赏
收藏
请问一下,数据库的外键信息存在哪张系统表中?
请教熟悉sql server的高手,一个数据库的外键信息存储在哪张表里? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lgl2004
2005-04-21
打赏
举报
回复
我提出这一问题的目的是:
因为数据库里建了无数的外键,我现在想给外键设定:级联删除、级联更新,倘若一个一个打勾,太麻烦,如何才能写一个sql脚本或存储过程,将所有的外键的级联删除、级联更新都打上勾呢?
paoluo
2005-04-21
打赏
举报
回复
sp_fkeys
返回当前环境的逻键外键信息。该过程显示各种外键关系,包括禁用的外键。
语法
sp_fkeys [ @pktable_name = ] 'pktable_name'
[ , [ @pktable_owner = ] 'pktable_owner' ]
[ , [ @pktable_qualifier = ] 'pktable_qualifier' ]
{ , [ @fktable_name = ] 'fktable_name' }
[ , [ @fktable_owner = ] 'fktable_owner' ]
[ , [ @fktable_qualifier = ] 'fktable_qualifier' ]
参数
[@pktable_name =] 'pktable_name'
是表的名称(该表带有主键),使用该表返回目录信息。pktable_name 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。必须提供这个参数或 fktable_name 参数,或者同时提供二者。
[@pktable_owner =] 'pktable_owner'
表所有者的名称(该表带有主键),使用该表返回目录信息。pktable_owner 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。如果没有指定 pktable_owner,则采用基础 DBMS 默认的表可视性规则。
在 Microsoft® SQL Server™ 中,如果当前用户拥有的表具有指定名称,则返回该表的列。如果没有指定 pktable_owner,而且当前用户没有带有指定的 pktable_name 的表,那么该过程便查找数据库所有者所拥有的表,看看其中是否有某个表带有指定的 pktable_name。如果有,则返回该表的列。
[@pktable_qualifier =] 'pktable_qualifier'
是表限定符的名称(该表带有主键)。pktable_qualifier 的数据类型为 sysname,默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,该限定符表示数据库名称。在某些产品中,该列表示表所在数据库环境的服务器名。
[@fktable_name =] 'fktable_name'
是表的名称(该表带有外键),使用该表返回目录信息。fktable_name 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。必须提供这个参数或 pktable_name 参数,或者同时提供二者。
[@fktable_owner =] 'fktable_owner'
是表所有者的名称(该表带有外键),使用该表返回目录信息。fktable_owner 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。如果没有指定 fktable_owner,则采用基础 DBMS 默认的表可视性规则。
在 SQL Server 中,如果当前用户拥有一个带有指定名称的表,那么就返回该表的列。如果没有指定 fktable_owner,并且当前用户没有带有指定的 fktable_name 的表,那么该过程就查找数据库所有者所拥有的表,看看其中是否有某个表带有指定的 fktable_name。如果有,则返回该表的列。
[@fktable_qualifier =] 'fktable_qualifier'
是表限定符的名称(该表带有外键)。fktable_qualifier 的数据类型为 sysname,默认值为 NULL。在 SQL Server 中,该限定符表示数据库名称。在某些产品中,该列表示表所在数据库环境的服务器名。
返回代码值
无
结果集
列名 数据类型 描述
PKTABLE_QUALIFIER sysname 表限定符的名称(该表带有主键)。该字段可以为 NULL。
PKTABLE_OWNER sysname 表所有者的名称(该表带有主键)。该字段始终返回值。
PKTABLE_NAME sysname 表的名称(该表带有主键)。该字段始终返回值。
PKCOLUMN_NAME sysname 主键列的名称,针对返回的 TABLE_NAME 的每个列。该字段始终返回值。
FKTABLE_QUALIFIER sysname 表限定符的名称(该表带有外键)。该字段可以为 NULL。
FKTABLE_OWNER sysname 表所有者的名称(该表带有外键)。该字段始终返回值。
FKTABLE_NAME sysname 表的名称(该表带有外键)。该字段始终返回值。
FKCOLUMN_NAME varchar(32) 外键列的名称,针对返回的 TABLE_NAME 的每个列。该字段始终返回值。
KEY_SEQ smallint 多列主键中列的序列号。该字段始终返回值。
UPDATE_RULE smallint 当 SQL 操作是更新时,应用于外键的动作。SQL Server 为这些列返回 0 或 1。开放数据服务网关可返回值 0、1 或 2:
0= 对外键的 CASCADE 修改。
1= 如果有外键,那么进行 NO ACTION 修改。
2=SET_NULL;将外键设置为 NULL。
DELETE_RULE smallint 当 SQL 操作是删除时,应用于外键的动作。SQL Server 为这些列返回 0 或 1。开放数据服务网关可返回值 0、1 或 2:
0= 对外键的 CASCADE 修改。
1= 如果有外键,那么进行 NO ACTION 修改。
2=SET_NULL;将外键设置为 NULL。
FK_NAME sysname 外键标识符。如果对数据源不可用,则其为 NULL。SQL Server 返回 FOREIGN KEY 约束名。
PK_NAME sysname 主键标识符。如果对数据源不可用,则其为 NULL。SQL Server 返回 PRIMARY KEY 约束名。
返回的结果集按 FKTABLE_QUALIFIER、FKTABLE_OWNER、FKTABLE_NAME 及 KEY_SEQ 排序。
注释
如果应用程序编码中包含某些表,而这些表带有禁用的外键,那么可以通过如下方法实现应用程序编码:
当使用这些表时,临时禁用限制检查(ALTER TABLE NOCHECK 或 CREATE TABLE NOT FOR REPLICATION),稍后再重新启用它。
使用触发器或应用程序代码强制实施关系。
如果提供了主键表名,而外键表名为 NULL,那么 sp_fkeys 将返回所有这样的表:该表包含指向给定的表的外键。如果提供了外键表名,而主键表名为 NULL,那么 sp_fkeys 将返回所有这样的表:该表通过主键/外键关系与外键表中的外键相关联。
sp_fkeys 存储过程等价于 ODBC 中的 SQLForeignKeys。
权限
执行权限默认授予 public 角色。
示例
下面的示例为 Northwind 数据库中的 Customers 表检索一个外键的列表。
USE Northwind
EXEC sp_fkeys @pktable_name = N'Customers'
paoluo
2005-04-21
打赏
举报
回复
sp_fkeys
返回当前环境的单个表的外键信息
MySQL速查手册
整理人:ocean 本手册仅用于学习交流,任何人未经允许不得以任何形式将其用于商业用途。
PowerDesigner15.1汉化包
PowerDesigner15.1完整汉化包,欢迎下载汉化。 有问题到我的博客留言反映:http://www.iitshare.com 或者获取最新的汉化包
数据库
外键
约束是什么?为什么要避免使用
数据库
外键
约束?
数据库
外键
约束是什么?为什么要避免使用
数据库
外键
约束?
数据库
中的
外键
此ALTER TABLE语句告诉
数据库
管理
系统
为订单表(Order)中的customer_id列添加一个
外键
,它的名称为fk_order_customer,同时指定此
外键
引用顾客表(Customer)的customer_id列。在这种情况下,表之间的关系是经理表是“参照表”(也称为主表),员工表(Employee)是“引用表”。为了限制员工
表中
每个员工记录中的ManagerID列只能引用有效的经理记录,我们可以对员工
表中
的ManagerID列创建一个
外键
约束,引用经理
表中
的ManagerID列。
数据库
外键
理论及MySQL
外键
实现规定
1. 关系
数据库
外键
概念理论(大学时学习的概念) 教材是:王珊,萨师煊老师的
数据库
系统
概论——第五版,这里直接丢截图了。 有三类完整性约束,分别是:实体完整性、参照完整性以及用户定义的完整性。 其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系
系统
自动支持(例如MySQL要负责这部分约束的检查) 用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束 不做强制检查,最多让人感觉不符合现实或者有点蠢,和程序员不怎么相关??????????
MS-SQL Server
34,873
社区成员
254,640
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章