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

最新文章

  1. 利用@media screen实现网页布局的自适应
  2. 小议jQuery插件开发
  3. Linux嵌入式入门
  4. 看懂SqlServer查询计划
  5. 虚拟机及ubuntu环境搭建问题
  6. VMware Workstation 10.0 下载 – 正版序列号+简体中文官方原版
  7. 文本框按键事件onkeydown、onkeypress、onkeyup区别
  8. 教你成为全栈工程师(Full Stack Developer) 〇-什么是全栈工程师
  9. 从零开始搭建支持http2的web服务
  10. js 逻辑运算符优化
  11. Fiddler抓包【5】_Fiddler过滤
  12. Java过滤掉字符串中的html标签、style标签、script标签
  13. usrp使用
  14. Atitit s2018.5 s5 doc list on com pc.docx  v2
  15. bzoj1594 Pku3764 The xor-longest Path
  16. HDU3377 Plan
  17. JUC——延迟队列
  18. Kubernetes的UI界面Kubernetes Dashboard的搭建
  19. nasm 与 masm语法区别
  20. Js添加、读取、删除cookie,判断cookie是否有效,指定domain域下主路径path下设置cookie,设置expires过期时间

热门文章

  1. Vuex扫描自定义文件夹下的所有文件
  2. leecode76. 最小覆盖子串
  3. ecplise项目启动出现permgen space异常内存不够
  4. selenium定位元素不稳定的解决方式
  5. C语言源文件如何编译为exe
  6. jupyter notebook 切换环境
  7. popen函数和pyinstaller打包之 -w冲突
  8. 入坑winpdb-1.4.8
  9. RabbitMQ 修改密码
  10. python调用包中函数__init__作用