代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
MSSQL
】
SQL批量添加主键脚本
作者:
xqf222
/ 发布于
2014/2/25
/
597
-SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整形自增一 --添加规则2:如果数据表已有主键,则不添加 --添加规则3:如果数据表没主键但已存在自增一的标识列,则设置该标识列为主键 --添加规则4:如果数据表没主键且已存在ID列,则会删除掉该列,记得要检查该ID列是否包含重要数据,如果有的话,请执行脚本前改名。 --脚本代码开始 declare @ColumnName nvarchar(250) set @ColumnName='ID' --要新增的主键列名,可自己修改 declare @TableName nvarchar(250)--游标中取出的数据表名 declare @TableID INT--游标中取出的数据表编号 declare @IdentityColumnName nvarchar(250)--数据表的已有标识列名称 --声明读取数据库所有数据表名和编号的游标 declare mycursor1 cursor for select name,id from dbo.SysObjects WHERE OBJECTPROPERTY(ID, 'IsUserTable') = 1 order by name --打开游标 open mycursor1 --从游标里取出数据赋值到我们刚才声明的数据表名变量和数据表编号变量中 fetch next from mycursor1 into @TableName,@TableID --如果游标执行成功 while (@@fetch_status=0) begin --判断当前数据表是否存在主键,如果数据表已有主键则不添加 IF NOT EXISTS (select * from information_schema.key_column_usage whereTABLE_NAME=''+@TableName+'') begin --如果数据表中已经存在标识列,则将标识列设置为主键 if Exists(Select top 1 1 from sysobjects Where objectproperty(id, 'TableHasIdentity') = 1 and upper(name) = upper(@TableName)) begin Select @IdentityColumnName=name from syscolumns Where id = @TableID and columnproperty(id, name, 'IsIdentity') = 1 print '当前数据表['+@TableName+']没有主键但有标识列['+@IdentityColumnName+']' exec ('ALTER TABLE ['+@TableName+'] ADD CONSTRAINTPK_'+@TableName+'PRIMARY KEY CLUSTERED ('+@IdentityColumnName+') ON [PRIMARY]') print '成功设置数据表['+@TableName+']已有标识列['+@IdentityColumnName+']为主键' end else begin print '当前数据表['+@TableName+']没有主键和标识列' IF EXISTS (select * from syscolumns Where ID=OBJECT_ID(N'['+@TableName+']') andname=''+@ColumnName+'') begin --如果已有ID列设置有索引,则删除数据表@TableName中指定字段@ColumnName对应的所有约束 declare @ConstraintName varchar (250)--定义当前查询的约束变量 --声明读取数据表中指定字段对应的所有约束列表游标 declare mycursor2 cursor for select name from sysobjects left join sysconstraints on sysconstraints.constid=sysobjects.id where parent_obj=OBJECT_ID(''+@TableName+'') and colid=(select colid from syscolumns where id=OBJECT_ID(''+@TableName+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1 and upper(name)=upper(@ColumnName)) --打开游标 open mycursor2 --从游标里取出数据赋值到约束名称变量中 fetch next from mycursor2 into @ConstraintName --如果游标执行成功 while (@@fetch_status=0) begin --删除当前找到的约束 exec ('ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']') print '已成功删除数据表['+@TableName+']字段['+@ColumnName+']对应的约束['+@ConstraintName+']' --用游标去取下一条记录 fetch next from mycursor2 into @ConstraintName end --关闭游标 close mycursor2 --撤销游标 deallocate mycursor2 --如果存在列[ID]则先删除该列 exec ('ALTER TABLE ['+@TableName+'] DROP COLUMN'+@ColumnName+'') --添加数据表的主键列ID exec ('ALTER TABLE ['+@TableName+'] ADD'+@ColumnName+'[int] IDENTITY(1,1) NOT NULL PRIMARY KEY') end else begin --如果存在列[ID]则直接添加主键列ID exec ('ALTER TABLE ['+@TableName+'] ADD'+@ColumnName+'[int] IDENTITY(1,1) NOT NULL PRIMARY KEY') end print '成功设置数据表['+@TableName+']列['+@ColumnName+']为主键' end end else begin print '当前数据表['+@TableName+']已有主键' end --用游标去取下一条记录 fetch next from mycursor1 into @TableName,@TableID end --关闭游标 close mycursor1 --撤销游标 deallocate mycursor1 --脚本代码结束
试试其它关键字
主键
同语言下
.
SQL查询 多列合并成一行用逗号隔开
.
查看存储过程修改时间,最近执行时间
.
设置手动批量删除数据库相关进程
.
获取某个表中特定字段的所有字符串形式
.
SQL 如何去除重复的字符串
.
怎么去掉一个字段中的重复数据
.
String 去除空格 回车 换行 水平制表符
.
SQL查询和替换含有回车,空格,TAB
.
SQL SERVER 查询每日新增用户数量、次留数量
.
判断两个字符串是否存在相同的内容
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
xqf222
贡献的其它代码
(
82
)
.
VB编写的登录局域网内的sql2000数据库服务器
.
ASP .NET登录界面用户验证码
.
VB操作ACCESS数据库
.
批量发送邮件程序
.
批量抓取网页代码中的HTTP和邮件地址
.
禁止站外提交参数测试
.
FTP网站文件到本地的
.
调用对应的应用程打开文件
.
抓取邮件内容解析
.
保存文件时候的弹出选择要保存的文件夹带新建文件夹效
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3