我在SQL Azure中有一個數據庫,我想用腳本刪除所有列存儲索引。在SQL Azure數據庫上刪除索引時出錯:關鍵字'ON'(用戶上下文= dbo)附近的語法不正確
我正在使用SQL Server的SQL管理登錄使用SSMS進行連接。
我使用這個腳本:
declare @sql nvarchar(max);
set @sql = N'';
select @sql = @sql + N'DROP INDEX ' + OBJECT_SCHEMA_NAME(i.OBJECT_ID) + '.' + i.name + N' ON ' + OBJECT_SCHEMA_NAME(i.OBJECT_ID) + '.' + o.name + ';
'
FROM sys.indexes AS i INNER JOIN sys.tables AS o ON i.[object_id] = o.[object_id]
where i.name is not null and o.name is not null and i.type_desc like '%COLUMN%'
PRINT @sql;
EXEC sp_executesql @sql;
一個例子聲明:
DROP INDEX [dbo].[CCI_MyTable] ON [dbo].[MyTable];
運行時,這會產生錯誤:
Incorrect syntax near the keyword 'ON'.
如果我嘗試只是:
DROP INDEX [dbo].[CCI_MyTable]
這會產生錯誤:
Cannot drop the index 'dbo.CCI_MyTable', because it does not exist or you do not have permission.**
在SSMS中,我可以看到SQL Server管理用戶在[主]數據庫中存在,但在我在工作的數據庫中不存在
內。這個數據庫,我正在爲「DBO」:
SELECT USER_NAME() -- DBO
SELECT CURRENT_USER; -- DBO
不應該DBO權限來刪除索引?
要求:
什麼是正確的方式去做這件事?我是否需要將管理員用戶添加到此數據庫?如果該用戶存在,並且我使用SSMS連接,那麼user_name()是那個用戶而不是dbo?
刪除DBO [CCI_MyTable],並保持腳本的休息,因爲它是 – TheGameiswar
指標勢必表,表由架構 – TheGameiswar
區分看來。像dbo之前的INDEX名稱是問題。互聯網上的很多例子都使用這種表示法,所以不確定我的問題是什麼。 – tbone