2
A
回答
5
請注意,如果列由聚簇索引引用,則可能無法刪除列,並且不能刪除表中的所有聚簇索引,因爲SqlAzure表必須始終具有聚簇索引。
這意味着你可能通過以下跳火圈(至少你最後的聚集索引,這很可能是你的主鍵):
- 重命名您的聚集索引
- 創建一個臨時版本表(用新的聚集索引)
- 從當前表中的數據複製
- 刪除當前表
- 臨時表重命名爲當前的名稱
這大致是這樣的:
-- Rename clustered index
EXECUTE sp_rename N'PK_My_Current_PK', N'PK_My_Current_PK_OLD', 'OBJECT'
-- If you have any FK constraints on the table, then drop them
ALTER TABLE dbo.MyTable DROP CONSTRAINT FK_My_Foreign_Key
-- Create the new version of your table - because this is SQLAzure it must have a clustered index
CREATE TABLE dbo.tmp_MyTable (
MyID int NOT NULL,
CONSTRAINT PK_My_Current_PK PRIMARY KEY CLUSTERED (MyID)
)
-- Copy the data into the temp table from the old table
INSERT INTO dbo.tmp_MyTable (MyID)
SELECT MyID FROM dbo.MyTable
-- Drop the old table
DROP TABLE dbo.MyTable
-- Rename the new table
EXECUTE sp_rename N'tmp_MyTable', N'MyTable', 'OBJECT'
-- Recreate any foreign key constraints
ALTER TABLE dbo.MyTable WITH CHECK ADD FK_My_Foreign_Key FOREIGN KEY (MyID)
REFERENCES dbo.MyForeignTable (MyID)
希望幫助
一個
編輯:作爲@PhilBolduc指出SqlAzure表需要一個聚集索引,不是主鍵。我已經修改了上面的術語 - 答案的原則依然存在。
1
不幸的是,您不能刪除標識列而不刪除它。新增一個帶有臨時名稱的新列,更新新的列值,然後刪除前一列。
ALTER TABLE dbo.tablename ADD newcolumnname INT
UPDATE dbo.tablename SET newcolumnname = oldcolumnname FROM dbo.tablename
ALTER TABLE dbo.tablename DROP COLUMN oldcolumnname
應該這樣做。除非我誤解了你的問題?
+0
對不起。我應該提到我有過敏問題,因爲列上的主鍵,我無法刪除它。但是,謝謝! – Michael
相關問題
- 1. 在SQL Azure的現有列表中設置標識
- 2. 實體框架使用組合鍵設置標識值Azure SQL
- 3. 如何在SQL Azure中設置外鍵?
- 4. 如何在SQL Azure中設置ACS?
- 5. 設置SpecFlow在標識符
- 6. 將應用程序池的標識設置爲Azure中的LocalSystem
- 7. 在SQL SERVER中重置標識值
- 8. 設置設備標識符()
- 9. 在SQL SERVER 2005中設置標識列的最大值
- 10. 在Bootstrap.groovy中設置Grails域標識
- 11. 如何在MKPointAnnotation中設置標識符
- 12. Azure批處理 - 爲任務設置自定義用戶標識
- 13. 如何在SQL Azure中獲取當前事務標識
- 14. 在Python中打印設置時刪除設置標識符
- 15. 在列表中標識INF值並將其設置爲空
- 16. 設置標識在sqlce表中自動增加?
- 17. SQLite-優雅設置標識
- 18. SQL Compact中重新設置的標識列
- 19. 將列標識上的標識設置爲SQL Server 2005中另一個表的列
- 20. SQL Server 2012 - 在主鍵上設置標識列
- 21. 如何設置的別名標識符在SQL
- 22. 郵件設置在Azure中
- 23. 如何標識列設置爲創建表中的SQL服務器
- 24. Azure表設置查詢
- 25. 設備標識和設置API
- 26. Azure表或SQL Azure?
- 27. asp.net標識表位置
- 28. 在Rails中設置動態數據目標和標識
- 29. 如何識別SQL Azure中的死鎖?
- 30. HTML:爲列表中的onclick設置標識
謝謝。那正是我的問題。太糟糕了,它不能做更容易的想法。非常感謝 – Michael
SqlAzure中的PK約束是其他版本不具備的一個非常令人沮喪的限制(或者差異 - 我猜這是一個更合適的詞)。很高興答案指出了它。 – alergy
SQL Azure中的表不需要PK。他們需要一個聚集索引。見http://msdn.microsoft.com/en-us/library/windowsazure/ee336245.aspx#cir –