我正在使用DELETE語句的OUTPUT子句插入到歸檔表中。在azure sql中使用OUTPUT子句刪除語句
此代碼在我的本地數據庫上沒有問題。但是,我在Azure數據庫上運行時遇到錯誤,因爲列值爲空。
爲什麼Azure上的行爲會有所不同?
此代碼:
DECLARE @courseId uniqueidentifier
SET @courseId = 'c7f5a926-e77a-4465-9120-38da284ed7d5'
DECLARE @courseCode nvarchar(max)
SELECT @courseCode = CourseCode FROM Courses WHERE CourseId = @courseId
SELECT @courseId
SELECT @courseCode
-- Courses
DELETE Courses
OUTPUT DELETED.*
INTO Archived_Courses
WHERE CourseId = @courseId
返回此錯誤:
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Msg 515, Level 16, State 2, Line 16 Cannot insert the value NULL into column 'CourseName', table '...dbo.Archived_Courses'; column does not allow nulls. INSERT fails. The statement has been terminated.
您沒有向我們展示表格定義 - 您是否自己檢查過它們?另外,我們沒有任何數據 - 您確定您正在使用相同的表定義*和*本地計算機和Azure之間的足夠類似的數據? –
稍後再仔細檢查。假設Azure SQL支持帶輸出子句的刪除語句,那麼表上的不同聚簇索引會導致此行爲? – TonE
你是對的 - 有一長串列和兩列的位置切換。這引發了一個進一步的問題:是否在OUTPUT DELETED。*子句中指定列名 - 對此有何看法? – TonE