Sql-Server
在 SQL Server Express 2008 中未正確刪除表
我已經刪除了一個表,但它仍然列在 sys.tables 中。更令人困惑的是,我可以以一個使用者的身份再次創建表,但如果我以另一個具有相同權限的使用者身份登錄,我就不能(我收到表已存在的消息)。我需要作為第二個使用者重新創建表。
我已經設法以 sa 使用者身份登錄並執行 DBCC checkdb,但它沒有採取任何措施來解決問題。如何永久刪除 sys.tables 中的記錄(我假設這是問題的原因)。
無論是否使用
dbo
,始終明確指定模式前綴。否則,如果您的使用者具有不同的預設架構,您最終可能會在一個您沒想到的架構中得到對象。一個使用者在一個模式中創建了一個表,而另一個使用者看不到它。這是一個簡單的例子:CREATE SCHEMA floob AUTHORIZATION dbo; GO CREATE USER blat1 WITHOUT LOGIN WITH DEFAULT_SCHEMA = floob; CREATE USER blat2 WITHOUT LOGIN WITH DEFAULT_SCHEMA = dbo; GRANT CREATE TABLE TO blat1, blat2; GRANT ALTER ON SCHEMA::floob TO blat1, blat2; GRANT ALTER ON SCHEMA::dbo TO blat1, blat2; EXECUTE AS USER = 'blat1'; GO CREATE TABLE Employees(ID INT); GO REVERT; SELECT s.name, t.name FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id] WHERE t.name = N'Employees'; EXECUTE AS USER = 'blat2'; GO CREATE TABLE Employees(ID INT); GO REVERT; SELECT s.name, t.name FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id] WHERE t.name = N'Employees';
結果:
----- --------- floob Employees ----- --------- dbo Employees floob Employees
您應該檢查用於刪除表的使用者的預設架構。現有的表應該在另一個模式中,而要刪除的表在使用者的預設模式中。