SQLServer数据库,使用Alter修改表的主外键结构
1.先创一张测试表,直接在创建时,设置UserId为主键

2.检查表有无主键约束

也可以使用SQL语句查询
SELECT name FROM sys.key_constraints
WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test'

3.使用ALTER修改表的主键
每张表只能有一个主键,所以如果想要更改其他列为主键,需要先删除已有的主键
我们可以使用上面的SQL查询语句,先找到主键名进行删除,再重新设置主键
SELECT name FROM sys.key_constraints
WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test'
--PK__Test__1788CC4C30E67086
ALTER TABLE Test DROP CONSTRAINT PK__Test__1788CC4C30E67086
检查主键是否已被删除

4.然后我们开始将UserName设置为主键
ALTER TABLE Test
ADD CONSTRAINT PK_Test_UserName PRIMARY KEY (UserName)

主键就从UserId更改成UserName.
5.再创建一张Test2表,这张表的Name列是外键是Test的UserName

6.查找外键
exec sp_pkeys 'Test'
exec sp_fkeys'Test'
select a.name as 约束名,object_name(b.parent_object_id) as 外键表,d.name as 外键列,
object_name(b.referenced_object_id) as 主健表,c.name as 主键列
from sys.foreign_keys A inner join sys.foreign_key_columns B on A.object_id=b.constraint_object_id
inner join sys.columns C on B.parent_object_id=C.object_id and B.parent_column_id=C.column_id
inner join sys.columns D on B.referenced_object_id=d.object_id and B.referenced_column_id=D.column_id
where object_name(B.referenced_object_id)='Test'

7.删除外键约束
SELECT * FROM sys.foreign_keys
WHERE referenced_object_id=OBJECT_ID('Test')
--FK__Test2__Name__164452B1
ALTER TABLE dbo.Test2
DROP constraint FK__Test2__Name__164452B1

8.设置Student为新的外键

关于删除主外键的时候,如果主外键名是变量存储,可以这样操作
DECLARE @KeyName VARCHAR(255)
SELECT @KeyName = name FROM sys.key_constraints
WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test'
IF(@KeyName IS NOT NULL)
BEGIN
DECLARE @sql varchar(max)
SET @sql = 'ALTER TABLE Test DROP CONSTRAINT ' + @KeyName
EXEC (@sql) --要加上()
END
GO
SQLServer数据库,使用Alter修改表的主外键结构的更多相关文章
- 在PowerDesigner中设计物理模型1——表和主外键
原文:在PowerDesigner中设计物理模型1--表和主外键 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念模型,然后由概念模型生成物理模型. 设计好逻辑模型,然后由逻辑模型 ...
- 数据库的SQL语句创建和主外键删除操作
create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...
- 在PowerDesigner中设计物理模型1——表和主外键(转)
出处:http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念 ...
- SQL SERVER中获取表间主外键关系
sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...
- Sql中常用的创建表 约束 主外键 增删改查的语句
创建数据库 USE master; GO --日记数据库 create database DiaryBase on ( name=DiaryBase_Dat,--逻辑名称 FILENAME='c:\D ...
- 通过sql命令建表 和 主外键约束以及其他约束
create table命令 create table dept ( dept_id int primary key, dept_name ) not null, dept_address ) ) c ...
- 表有主外键约束时的delete 方法 2008
--1.禁用约束 ALTER TABLE abppmgr.MST_ITEMMASTER disable CONSTRAINT C0248833319_7676; --2.删除数据 truncate t ...
- MySQL创建数据表并建立主外键关系
为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...
- netcore2.0 ORM框架中如何配置自定义的主外键加载
环境:netcore2.0 DB :mysql ORM:Ant https://github.com/yuzd/AntData.ORM/tree/netcore2 [给我一个star吧] NUGET: ...
- 【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
转自:https://www.cnblogs.com/happyday56/p/3849018.html 关键字:sql server复制 [SQL Server高可用性]数据库复制:修改表结构.新增 ...
随机推荐
- vue.js----之router详解(三)
在vue1.0版本的超链接标签还是原来的a标签,链接地址由v-link属性控制 而vue2.0版本里超链接标签由a标签被替换成了router-link标签,但最终在页面还是会被渲染成a标签的 至于为什 ...
- nacos服务端和客户端版本不一致的时候,客户端无限刷日志
解决方法: logging: level: com: alibaba: nacos: client: error
- C# 设置桌面为父窗口
#region 设置桌面为父窗口 IntPtr hDesktop; public const int GW_CHILD = 5; public IntPtr GetDesktopHandle(Desk ...
- nginx 结合tomcat 双机热备
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- myForEach
Array.prototype.myForEach = function (callback, thisArg = undefined) { if (typeof callback !== 'func ...
- 安卓app的签名打包
今天学习了什么是Android程序的签名打包. Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时, 是AS会自动用 ...
- IaaS--区域和可用区(何恺铎《深入浅出云计算》笔记整理)
[关键概念] IaaS(Infrastructure as a Service):即"基础设施即服务",一般指云计算所提供的计算.存储.网络等基本底层能力.是基于软件技术对物理硬件 ...
- 各种工具点评以供选择使用 + 开发工具秘籍(git, webpack。。。。)
git最佳实践: https://gist.github.com/fandean/ca29cd2f326f66c659951d7ab356cefb ========================== ...
- SWUpdate(Suricatta) + Hawkbit Server
SWUpdate的详细介绍 https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/imx-processors%40tkb/5632/ ...
- jmeter--json格式的请求数据参数化以及断言
环境背景:登录接口测试 第一步:创建登录接口的http请求 第二步:添加配置原件--CSV Data Set Config(配置如图所示) 第三步:接口的请求下添加响应断言(如:用响应状态码作为检查点 ...