Azure-Sql-Database
從沒有連結的單個 Azure DB 表中刪除記錄 - 對數據庫和/或伺服器名稱的引用 .. 不支持
環境
- Azure SQL 數據庫(從 SQL Server 遷移而來)
- 原來的舊數據庫(15 年以上)
- 處理單個表(試圖刪除記錄)
- 使用管理員使用者
- 使用 SSMS 2014
- 表上有一些觸發器(禁用它們不會產生錯誤變化)
- 數據庫名稱
databasename
在我們的範例中- 有一個 azure blob 儲存,其中儲存文件並由應用程序通過所述
tblImages
表中的記錄“引用” - 但我看不到兩者之間的任何硬連結(這甚至可能嗎?)我可以在此表中選擇、插入和更新記錄,但不能刪除。
失敗的腳本
delete from [databasename].[dbo].[tblImages] where companyid = 123
錯誤:
消息 40515,級別 15,狀態 1,第 91 行對“Azure.dbo.tblImages”中的數據庫和/或伺服器名稱的引用在此版本的 SQL Server 中不受支持。
但是誰說過“ Azure .dbo.tblImages”?!?
我嘗試過的事情
- 已嘗試完全限定表名,而不是 - 沒有變化。
- 嘗試使用“編輯前 200”功能刪除記錄,同樣的錯誤
- 嘗試禁用表上的所有觸發器,沒有變化
- 嘗試了腳本“創建到新視窗”,但沒有關於連結數據庫/伺服器或其他表約束
這是一個在完全相同的環境下成功的簡單測試:
CREATE TABLE _tmpPersons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ); INSERT INTO _tmpPersons ( PersonID , LastName , FirstName , Address , City ) VALUES (123, 'Tore', 'Tess', '123 Main St.', 'Nowheresville'); select * from _tmpPersons; delete from _tmpPersons where PersonId = 123; select * from _tmpPersons;
我已經嘗試過完全合格
[database].[schema].[table]
的和不同的組合。它絕對是一個表,並且有觸發器,但禁用它們不會改變任何事情。
從以下位置找到零個結果:
SELECT OBJECT_NAME(referencing_id), referenced_database_name FROM sys.sql_expression_dependencies WHERE referenced_database_name IS NOT NULL;
來自 MSDN 論壇的 David 讓我走上了正軌;錯誤消息是正確的,您只需要找出引用的位置。
- 查看有哪些 CASCADE DELETE FK 約束
- 檢查其他表
- 請參閱 FROM 子句中具有 3 部分名稱的表上的觸發器
- 正確為 2 部分名稱
- 舞蹈
要查看是否存在帶有 DELETE CASCADE 的 FK 關係:
select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS where DELETE_RULE ='CASCADE'
更改您的查詢
delete from [databasename].[dbo].[tblImages] where companyid = 123
到
delete from [dbo].[tblImages] where companyid = 123