`
flyaswish
  • 浏览: 10797 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
最近访客 更多访客>>
社区版块
存档分类
最新评论

取得所有外键内容的脚本

    博客分类:
  • SQL
阅读更多
近来有个任务要找出SQL Server 2005某个数据库里所有的外键,包括外键表/列名、引用表/列名。随手写了个脚本,放在这里备忘。
-- This script scans your database and stores all FK information,
-- including source table/column and reference table/column. 
-- Then it will store this information into table fk, 
-- which is created at the beginning.


--- USE [YourDatabaseNameHere];

--- GO
IF NOT EXISTS (SELECT name
               FROM   sys.tables
               WHERE  name = N'fk')
  BEGIN
    CREATE TABLE [dbo].[fk] (
      [id]      [INT]   IDENTITY ( 1 , 1 )   NOT NULL,
      [stable]  [NVARCHAR](255)   NULL,
      [scolumn] [NVARCHAR](255)   NULL,
      [rtable]  [NVARCHAR](255)   NULL,
      [rcolumn] [NVARCHAR](255)   NULL,
      CONSTRAINT [fk_pk] PRIMARY KEY CLUSTERED ( [id] ASC ) WITH ( pad_index = OFF,ignore_dup_key = OFF ) ON [primary])
    ON [primary]
  END
ELSE
  BEGIN
    TRUNCATE TABLE fk
  END

GO

--- start processing FKs and store in table fk
DECLARE  @tableName NVARCHAR(255);

DECLARE tables CURSOR  FOR
SELECT   [name]
FROM     sys.tables
ORDER BY [name]

OPEN tables;

FETCH NEXT FROM tables
INTO @tableName

WHILE @@FETCH_STATUS = 0
  BEGIN
    INSERT INTO fk
               (stable,
                scolumn,
                rtable,
                rcolumn)
    SELECT @tableName    AS stable,
           t1.name       AS scolumn,
           t2.rtablename AS rtable,
           t2.name       AS rcolumn
    FROM   (SELECT col.name,
                   f.constid AS t
            FROM   syscolumns col,
                   sysforeignkeys f
            WHERE  f.fkeyid = col.id
                   AND f.fkey = col.colid
                   AND f.constid IN (SELECT DISTINCT (id)
                                     FROM   sysobjects
                                     WHERE  Object_name(parent_obj) = @tableName
                                            AND xtype = 'F')) AS t1,
           (SELECT Object_name(f.rkeyid) AS rtablename,
                   col.name,
                   f.constid             AS t
            FROM   syscolumns col,
                   sysforeignkeys f
            WHERE  f.rkeyid = col.id
                   AND f.rkey = col.colid
                   AND f.constid IN (SELECT DISTINCT (id)
                                     FROM   sysobjects
                                     WHERE  Object_name(parent_obj) = @tableName
                                            AND xtype = 'F')) AS t2
    WHERE  t1.t = t2.t
    
    FETCH NEXT FROM tables
    INTO @tableName
  END

CLOSE tables

DEALLOCATE tables

GO

SELECT *
FROM   fk
分享到:
评论

相关推荐

    Oracle9i取得建表和索引的DDL语句

    通常,先创建没有外键约束的表,然后再创建带有外键约束的表。这可以通过查询`DBA_CONSTRAINTS`找出依赖关系并排序实现。 总之,Oracle 9i通过`DBMS_METADATA`包提供了方便的方式来获取数据库对象的DDL语句,极大地...

    Oracle 9i轻松取得建表和索引的DDL语句

    获取一个SCHEMA下所有对象的DDL语句需要编写更复杂的脚本,循环遍历所有表和索引。这个过程需要注意参照完整性,即表之间的外键约束。重建顺序必须正确,以避免因依赖关系导致的错误。可以查询`DBA_CONSTRAINTS`和`...

    SQL开发指南

    创建数据库是构建任何SQL应用的第一步,确保有地方存储后续将创建的所有对象。 创建数据库的命令遵循特定的语法结构,通常形式为: ``` CREATE DATABASE database_name; ``` 其中`database_name`应替换为你希望...

    mysql的实用资料

    在这个教程中,你可能会学习到以下内容: 1. **基础概念**:包括数据库和表的创建,SQL语言的基本语法,如SELECT、INSERT、UPDATE和DELETE语句用于数据查询和操作。 2. **数据类型**:了解MySQL支持的各种数据类型...

    ssd7 exam2

    在"exam2.sql"文件中,我们可以预期找到与SQL语句相关的试题,如SELECT、INSERT、UPDATE、DELETE等基本操作,以及更高级的子查询、联接、视图、索引、存储过程等内容。考生需要理解每种语句的作用和用法,并能正确...

    学生成绩管理系统数据库设计.doc

    ### 学生成绩管理系统数据库设计 #### 一、需求分析 ...以上内容涵盖了学生成绩管理系统数据库设计的主要方面,包括需求分析、数据库设计、逻辑设计和实际的SQL脚本示例,为系统的实现提供了完整的指导。

    SQL server 2005 教程及使用技巧

    2. **表的设计**: 表是数据库的基础,学习如何定义字段、数据类型、主键、外键以及索引,以确保数据的完整性和一致性。 3. **存储过程与函数**: 存储过程和函数是预编译的SQL代码集合,能提高性能并简化代码复用。...

    博客网站开发源代码(绝对详细)

    此外,还需要建立合适的关联,如一个用户可以有多个文章,一篇文章可以有多条评论,这些关联可以通过外键实现。 在前后端交互上,ASP.NET的ADO.NET库提供了与SQL2005数据库的连接和操作能力。开发者可以使用SQL命令...

    data_files.zip

    5. **关系模型**:理解数据库中的表是如何通过主键和外键建立关联的,这在处理多表之间的关系时尤为重要。 6. **查询操作**:学会使用JOIN操作连接多个表,进行复杂的查询。例如,INNER JOIN返回两个表中匹配的记录...

    PHP校招题含答案.zip

    4. **存储引擎**:MySQL有多种存储引擎,如InnoDB(支持事务处理和外键)、MyISAM(读写速度快,不支持事务)等。 5. **安全性**:提供用户权限管理,可设置不同级别的访问控制,保障数据安全。 6. **扩展性**:...

    oracle10笔记

    - **创建表加入约束**:包括主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一键(UNIQUE)、非空(NOT NULL)等。 - **表结构示例**:给出具体的表创建示例,包括字段设计及其约束。 #### 20. 索引 - **建立索引**...

    PHP源码内有系统10个,可以无限制学习,是学习的好东西-PHP s...

    这涉及到字段定义、数据类型选择、主键和外键的设计等。 2. PHP基础:掌握PHP的基本语法,如变量、数组、条件语句、循环、函数等,是理解和修改源码的基础。 3. MVC模式:许多现代PHP应用遵循Model-View-...

    Oracle学习(比较齐全的介绍)

    取得大于第5条的所有数据 ```sql SELECT * FROM table_name WHERE ROWNUM > 5; ``` ##### 4. 取得薪水最高的前5名 ```sql SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) WHERE ROWNUM ; ``` ###...

    mysql面试题,提前熟悉,提前准备,备战面试

    - 外键(Foreign Key):用于建立表与表之间的关联,引用另一个表的主键。 2. SQL语言: - DDL(Data Definition Language):用于创建和修改数据库对象,如CREATE TABLE、ALTER TABLE等。 - DML(Data ...

    sql sever 自学教程

    理解如何定义数据类型、主键、外键以及约束(如UNIQUE、NOT NULL)对于数据完整性至关重要。你还将学习如何使用CREATE TABLE来创建新表,ALTER TABLE来修改现有表结构。 五、索引与查询优化 索引可以显著提高查询...

    二级Access笔试历年真卷二级Access笔试历年真卷

    通过深入学习和练习这些知识点,并结合历年真题,考生可以更好地理解和掌握Access的核心功能,从而在二级Access笔试中取得优异成绩。在复习过程中,不仅要注意理论知识,还要注重实际操作,提高问题解决能力。

    SQL Sever2005 编程教程

    - **表**:掌握如何设计和创建表,理解主键、外键和索引的概念,以及`CREATE TABLE`,`ALTER TABLE`和`DROP TABLE`的用法。 4. **数据类型** SQL Server 2005提供多种数据类型,如INT、VARCHAR、DATE等。理解每种...

Global site tag (gtag.js) - Google Analytics