繁体   English   中英

删除WITH CHECK CONSTRAINT或MSSQL中的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM