为数据库中所有表增加PK

辛辛苦苦将数据导入到数据库中,却发现忘记创建脚本中忘记PK了。

好在表都有规律,每个表有个 [ID] int字段,PK是建立在其上的。

注:

1)为了代码的可读性,没有采用‘SQL拼接’方法, 而是采用了‘先占位,后替换’的方法--看里面的Replace语句。推荐给大家

2)由于是执行DDL,出于 谨慎考虑,‘生成’而非‘直接执行’SQL。若不然,读者可以将里面的EXEC语句去掉注释。

----这是 代码---------------------------------------

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO 

-- =============================================
-- Author:      Yew
-- Create date: 2011-06-12
-- Description: 为所有表增加PK (on ID) 

/* ---------History---------------------------- 

---------------------------------------------*/
-- =============================================
CREATE PROCEDURE [TOOL].[sp_DB_AddPK]
AS
BEGIN
    SET NOCOUNT ON; 

    DECLARE @vTable varchar(100)
        ,@vSchema varchar(100)
        ,@vSql  varchar(max) 

    DECLARE cur_ CURSOR FOR
        SELECT [name], schema_name(schema_id)
        FROM sys.objects
        WHERE type in (N'U')
        ORDER BY schema_id, name

    OPEN cur_
    FETCH NEXT FROM cur_        INTO @vTable, @vSchema
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @vSQL = N'
ALTER TABLE [#Schema#].[#Table#] ADD  CONSTRAINT [PK_#Table#] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = ON, ONLINE = OFF) ON [PRIMARY]
GO 

'
        SET @vSQL = Replace(@vSQL, '#Table#', @vTable)
        SET @vSQL = Replace(@vSQL, '#Schema#', @vSchema)
print @vSql
--      EXEC (@vSql) 

        FETCH NEXT FROM cur_ INTO @vTable, @vSchema
    END
    CLOSE cur_
    DEALLOCATE cur_
END

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索replace
, table
, set
, ofbiz java pk
, 语句
varchar
给数据库表增加字段、数据库表增加字段、数据库表增加一列、数据库表中增加字段、在数据库表中增加一行,以便于您获取更多的相关知识。

时间: 2024-12-02 16:32:35

为数据库中所有表增加PK的相关文章

sql语句查询数据库中的表名/列名/主键/自动增长值实例_MsSql

sql语句查询数据库中的表名/列名/主键/自动增长值 ----查询数据库中用户创建的表 ----jsj01 为数据库名 select name tablename from jsj01..sysobjects where type='U' and name not in ('dtproperties') --查询表里的字段信息 ---docs为表名 ---- select * from syscolumns where id = object_id('docs') ----查询数据库中所有类型

JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法

黑马程序员 我们知道,在设计一个Java bean的时候,要把这些BEAN 的数据存放在数据库中的表结构,然而这些数据库中的表直接又有些特殊的关系,例如员工与部门直接有一对多的关系,学生与老师直接又多对多的关系,那么这些表的关系如何表示呢?首先在建立数据库的时候就应该建立这样的对应关系.一对多 ,只要建立两个表就能建立这样的关系,因为你可以把多方的那个表设置一个Foreign Key 属性 ,下面是一个部门和员工的表结构关系在MySQL 数据库上应该这样建立表结构: create table d

如何才能快速知道数据库中每个表的大小?

数据|数据库 sp_spaceused显示行数.保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间. 语法sp_spaceused [[@objname =] 'objname']    [,[@updateusage =] 'updateusage'] 参数[@objname =] 'objname' 是为其请求空间使用信息(保留和已分配的空间)的表名.objname 的数据类型是 nvarchar(776),默认设置为 NULL. [@updateus

浅谈SQL Server数据库中系统表的作用

(一)系统表:存储SQL所有的系统信息.存储有关数据库服务中的元数据所谓元数据即(比如数据服务器有哪些用户数据库.数据库服务器有哪些登陆账号,数据库中都有哪些表,每个表都有哪些字段 每个数据库有哪些存储过程.视图等等的数据),系统表一般sys开头. (二)了解数据库中系统表,可以编写sql语句或编程的时候用到.以下场景使用到了系统表 1.在创建数据库的时候选判断数据库是否存在:创建数据库中对象(表.视图.存储过程.索引等)是否存在,存在返回,不存在则执行创建语句. 2.批量删除数据库中对象,比如

VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中?

问题描述 VC ADO 怎么实现复制一个数据库中一个表的某些字段到另一个数据库的表中? 想从一个Access数据库中的a表中提取需要的字段复制到另一个数据库的b表中,有大神知道怎么弄吗 解决方案 循环读取第一个表的内容,然后插入第二个表.http://www.cnblogs.com/spatial/archive/2009/07/18/1526255.html 解决方案二: 循环复制,但是需要考虑a与b表是否一样,有什么对应关系,不能乱复制 解决方案三: 如何从一个数据库复制表的结构到另一个数据

如何将数据写入到数据库中的表中(c#连接sql数据库)

问题描述 我们使用c#连接数据库时,例如插入一条记录时,数据会被写调入数据缓冲区中,但并没有从数据缓冲区中写入到数据库的表中.当打开数据库中的表时,插入的数据并没显示在数据库的表中.如何才能真正把数据插入表中.希望大家多多指点. 解决方案 解决方案二:参考下SqlConnectionconn=newSqlConnection("DataSource=.;InitialCatalog=trace;IntegratedSecurity=True");conn.Open();SqlDataA

jsp-java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法

问题描述 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 解决方案 参考:http://blog.csdn.net/casilin/article/details/5750773 解决方案二: 楼主幸苦了!!谢谢分享!!! 解决方案三: jsp导excel到mysql数据库 http://wenku.it168.com/d_000468232.shtml

select-怎么 同时把数据库中 一个表的多条数据的一个自段修改,

问题描述 怎么 同时把数据库中 一个表的多条数据的一个自段修改, 数据库表 ,student , 字段 stu_id, stu_name,Stu_num,Stu_sex, 表 import , 字段, stu_id, import_id, imp_data, imp_name, 在查出两个表关联信息的时候,怎么把imprt表中的imp_data 字段改为系统当前时间 update import set imp_data =sysdata where stu_id in (select stu_i

改哪里可以显示数据库中的表

问题描述 packagedatabase;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;importjava.sql.Statement;importjavax.swing.JTable;publicclassDao{protectedstaticStringdb