加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

为数据库中所有表增加PK - MSSQL教程

发布时间:2013-12-28 18:30:36 所属栏目:MsSql教程 来源:站长网
导读:辛辛苦苦将数据导入到数据库中,却发现忘记创建脚本中忘记PK了。 好在表都有规律,每个表有个 [ID] int字段,PK是建立在其上的。 注: 1)为了代码的可读性,没
辛辛苦苦将数据导入到数据库中,却发现忘记创建脚本中忘记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

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读