2011-08-28 27 views
4

當我嘗試向SQL Azure表中插入一行時,出現以下錯誤。SQL Azure無法識別我的聚簇索引

此版本的 SQL Server不支持沒有聚集索引的表。請創建聚集索引並重試。

我的問題是我對該表有一個聚集索引。我使用SQL Azure MW來生成Azure SQL腳本。

下面是我使用的是什麼:

IF EXISTS (SELECT * FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'[dbo].[tblPasswordReset]') AND type in (N'U')) 
DROP TABLE [dbo].[tblPasswordReset] 
GO 
SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON 
IF NOT EXISTS (SELECT * FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'[dbo].[tblPasswordReset]') AND type in (N'U')) 
BEGIN 
CREATE TABLE [dbo].[tblPasswordReset](
    [PasswordResetID] [int] IDENTITY(1,1) NOT NULL, 
    [PasswordResetGUID] [uniqueidentifier] NULL, 
    [MemberID] [int] NULL, 
    [RequestDate] [datetime] NULL, 
CONSTRAINT [PK_tblPasswordReset] PRIMARY KEY CLUSTERED 
(
    [PasswordResetID] ASC 
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) 
) 
END 
GO 

爲什麼不SQL Azure的認識我的聚集鍵?我的腳本錯了嗎?

回答

4

您的腳本僅在表格尚未存在時才創建表格。也許還有一箇舊版本的表沒有聚集索引?您可以檢查有:

select * from sys.indexes where object_id = object_id('tblPasswordReset') 

如果表不存在聚集索引,你可以添加一個像:

alter table tblPasswordReset add constraint 
    PK_tblPasswordReset primary key clustered 

據我所看到的,你的發言不符合Azure create table spec

+0

當我運行該腳本選擇我得到PK_tblPasswordReset type_desc =麇集着結果。 這很奇怪... – Nate

+0

桌子上是否有觸發器? 'select * from sys.triggers where object_id = object_id('tblPasswordReset')'觸發器可能會在非集羣表上執行插入操作。 – Andomar

+0

我剛剛在SQL Azure數據庫上運行了確切的腳本,它運行良好。我懷疑問題在於您的數據庫中的其他內容與此腳本發生衝突。也許以前創建的表格版本? – knightpfhor

2

如果您使用SSIS,請小心。我遇到了同樣的問題,我自己,但是使用SSIS而不是手動插入數據。默認情況下,SSIS將刪除並重新創建該表,因此即使我已使用聚集索引正確定義了它,我的SSIS腳本仍然失敗。在SSIS嚮導中的「編輯映射」步驟中,您可以手動定義表創建腳本。我剛剛刪除了表格生成腳本,我的導入工作。

(我要離開這個作爲一個評論,但我的帖子的計數是太貧血)

相關問題