[英]Drop WITH CHECK CONSTRAINT or a function in MSSQL
我已使用以下查询更改了现有表
ALTER TABLE CodeAccess
WITH CHECK ADD CONSTRAINT CK_CodeAccess_Code
CHECK (dbo.chkCodeList('text1', 'text2', [Codes]) = 'True')
现在,我想从CodeAccess表中删除函数chkCodeList(,,) 。 我尝试使用
IF EXISTS (
SELECT * FROM sysobjects WHERE id = object_id(N'dbo.chkCodeList')
AND xtype IN (N'FN', N'IF', N'TF')
)
DROP FUNCTION dbo.chkCodeList
GO
它给出以下错误
Cannot DROP FUNCTION 'dbo.chkCodeList' because it is being referenced by object 'CK_CodeAccess_Code'.
所以,执行...
ALTER TABLE CodeAccess NOCHECK CONSTRAINT CK_CodeAccess_Code
Command(s) completed successfully.
现在,我正在尝试使用第一个查询更改表,它给了我...
There is already an object named 'CK_CodeAccess_Code' in the database.
并执行第二个查询,我得到相同的错误信息...
Cannot DROP FUNCTION 'dbo.chkCodeList' because it is being referenced by object 'CK_CodeAccess_Code'.
我也尝试了不带前缀dbo
那么,如何删除chkCodeList()函数呢?
尝试删除约束而不是NOCHECK
。 也就是说, drop the constraint -> drop the function
例如
ALTER TABLE CodeAccess
DROP CONSTRAINT CK_CodeAccess_Code;
DROP FUNCTION dbo.chkCodeList;
在您的情况下,您正在设置NOCHECK
但约束仍然存在,因此,当您再次尝试运行ALTER
命令时,它说名称为'CK_CodeAccess_Code'的对象已经存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.