我使用 SSMS 2019 (19.0.1) 表设计器遇到此错误:
找不到对象“xxxxx”,因为它不存在或您没有权限。
过去,我曾在其他桌子上这样做过,效果很好。我显然拥有权限,因为为了解决该错误,我必须编写数据脚本,删除表,然后重新创建它并重新加载数据。该表显然存在,因为我正在使用 SSMS 设计器来更改它。
如果我在表格底部添加一列,我不会收到此错误。仅当在列列表“顶部”的两个现有列之间添加时。
示例(我们添加一个环境变量,它比其他变量更重要):
我知道人们说列的顺序并不重要,但在我们(我的公司、同事和我的)看来,顺序很重要。我们经常“右键单击,然后选择前 1000 行”来查看表格。是的,我知道我们可以创建视图,但这不是我们想要的。
在表的末尾,我们有所有的安全字段,如 CreatedBy、ModifiedBy、CreatedDate、ModifiedDate 等...列后面没有真正的用户数据字段。我们希望在执行默认查询时可以查看最相关的数据。
我读过其他文章,讨论如何无法使用“更改”在两个现有列之间添加新列,但设计器通常会为您完成此操作。
所以我的问题是,为什么设计者在某些表上做得非常好,为什么在其他表上却给出了上述误导性错误?顺便说一句,我们在这些表上使用 AutoAudit (https://github.com/koenmd/AutoAudit/blob/master/AutoAudit%203.30a.sql),它创建触发器和视图来跟踪谁更改了什么。难道是表上有视图或者触发器导致了这种情况?
上面的 Dan Guzman 评论很有帮助,那就是从设计器生成脚本,然后单独运行它。如下所示完成此操作(添加您的列,右键单击,选择“生成更改脚本”:
当我这样做时,我注意到问题出在自动审核触发器或相关视图上。
Dropping AutoAudit components from table: [dbo].[My_TableName]
Dropping Table Audit DDL
Msg 4902, Level 16, State 1, Line 67
Cannot find the object "dbo.My_TableName" because it does not exist or you do not have permissions.
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 419 [Batch Start Line 68]
Either the parameter @OBJName is ambiguous or the claimed @objtype (OBJECT) is wrong.
Msg 1779, Level 16, State 0, Line 71
Table 'My_TableName' already has a primary key defined on it.
Msg 1750, Level 16, State 0, Line 71
Could not create constraint or index. See previous errors.
Msg 2714, Level 16, State 2, Procedure My_TableName_Audit_Insert, Line 1 [Batch Start Line 77]
There is already an object named 'My_TableName_Audit_Insert' in the database.
Msg 2714, Level 16, State 2, Procedure My_TableName_Audit_Update, Line 1 [Batch Start Line 231]
There is already an object named 'My_TableName_Audit_Update' in the database.
Msg 2714, Level 16, State 2, Procedure My_TableName_Audit_Delete, Line 1 [Batch Start Line 543]
There is already an object named 'My_TableName_Audit_Delete' in the database.
Msg 2714, Level 16, State 2, Procedure My_TableName_trgAfterUpdate, Line 1 [Batch Start Line 682]
There is already an object named 'My_TableName_trgAfterUpdate' in the database.
Msg 3902, Level 16, State 1, Line 697
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
Msg 2714, Level 16, State 5, Line 700
There is already an object named 'FK_My_TableNameCh_BizTalk_Email_Event' in the database.
Msg 1750, Level 16, State 1, Line 700
Could not create constraint or index. See previous errors.
Msg 3902, Level 16, State 1, Line 713
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
我想出了如何使用
删除 AutoAuditexec [审核].[pAutoAuditDrop] ...
奇怪的是,之后设计师仍然给出了同样的错误。我再次生成脚本,运行脚本,然后它运行并进行更改。所以现在我对结果很满意,但设计器工具似乎有问题。