sql – 使用主键更改列数据类型
发布时间:2021-03-08 00:28:26 所属栏目:MsSql教程 来源:网络整理
导读:我在80多个不同的表中有一个ReferenceID varchar(6)列.在需要分配ID的政府组织实施更改后,我需要将此扩展到整个数据库中的varchar(8). 我希望声明一个游标来获取表名,如下所示: DECLARE @TableName AS VARCHAR(200)DECLARE TableCursor CURSOR LOCAL READ
我在80多个不同的表中有一个ReferenceID varchar(6)列.在需要分配ID的政府组织实施更改后,我需要将此扩展到整个数据库中的varchar(8). 我希望声明一个游标来获取表名,如下所示: DECLARE @TableName AS VARCHAR(200) DECLARE TableCursor CURSOR LOCAL READ_ONLY FOR SELECT t.name AS TableName FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name = 'ReferenceID' OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName 然后按如下方式编辑类型: ALTER TABLE @TableName ALTER COLUMN ReferenceID VARCHAR(8) 这会失败,因为该列是某些表中主键的一部分(并且PK中包含的列因表而异). 我真的不想为每个表手动删除并重新创建每个PK. 在游标内,有没有办法在更改数据类型之前禁用PK然后重新启用它,或者在更改数据类型的任何一侧删除并重新创建PK,请记住PK将取决于我们在哪个表中’目前正在关注? 解决方法您需要在ALTER TABLE … ALTER COLUMN中明确指定NOT NULL,否则默认为允许NULL. PK列中不允许这样做.以下工作正常. CREATE TABLE p ( ReferenceID VARCHAR(6) NOT NULL PRIMARY KEY ) INSERT INTO p VALUES ('AAAAAA') ALTER TABLE p ALTER COLUMN ReferenceID VARCHAR(8) NOT NULL 当省略NOT NULL时,它会给出以下错误 Msg 5074,Level 16,State 1,Line 1 The object 'PK__p__E1A99A792180FB33' is dependent on column 'ReferenceID'. Msg 4922,State 9,Line 1 ALTER TABLE ALTER COLUMN ReferenceID failed because one or more objects access this column. 在编程方法中需要考虑的几件事情是,您需要暂时删除任何引用ReferenceID列的外键,并确保不包含当前可为空的(非PK)ReferenceID列的NOT NULL. (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 使用AlwaysOn功能的无SAN的高可用SQL Server
- 在SQL查询中用’*’替换电子邮件地址中的某些字符
- sql-server – 在同一个VM上运行2个SQL Server 2014实例是否
- sql-server – 如何在不使用.NET的情况下从SQL Server 2008
- sql – 在Oracle行的多个列上使用pivot
- SQL Server误区:数据库镜像在妨碍产生后顿时就能发明
- 网民本周警惕QQ号被盗 QQ龙变种RC将发作
- 又一RPC漏洞病毒出现 警惕“高波”再次作
- 英国政府网络惊现3大安全漏洞 OpenSSL推出补丁
- 微软将在SQL Server中添加XML数据类型
站长推荐
热点阅读