您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQLServer数据库,使用Alter修改表的主外键结构

bubuko 2022/1/25 18:59:05 sqlserver 字数 3500 阅读 870 来源 http://www.bubuko.com/infolist-5-1.html

1.先创一张测试表,直接在创建时,设置UserId为主键 2.检查表有无主键约束 也可以使用SQL语句查询 SELECT name FROM sys.key_constraintsWHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'Test ...

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修改表的主外键结构

原文:https://www.cnblogs.com/HuairongChen/p/15077775.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶