2017-09-12 10 views
0

我在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?

+1

刪除DBO [CCI_MyTable],並保持腳本的休息,因爲它是 – TheGameiswar

+0

指標勢必表,表由架構 – TheGameiswar

+0

區分看來。像dbo之前的INDEX名稱是問題。互聯網上的很多例子都使用這種表示法,所以不確定我的問題是什麼。 – tbone

回答

1

看來問題出現在索引名稱和模式之前(儘管我發誓我已經閱讀過很多例子)。

所以正確的腳本語法是:從[DBO]

declare @sql nvarchar(max); 
set @sql = N''; 
select @sql = @sql + N'DROP INDEX ' + 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; 
相關問題