我正在使用DELETE语句的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行受影响)
(1行受影响)
(1行受影响)
消息515,级别16,状态2,行16无法将值NULL插入 专栏' CourseName',table' ... dbo.Archived_Courses'专栏 不允许空值。 INSERT失败。声明已经终止。
答案 0 :(得分:1)
我做了一个repor,他在我的SQL Azure数据库上工作得非常好: 假设你有类似的东西:
Create Table Courses
(
CourseId uniqueidentifier NOT NULL PRIMARY KEY DEFAULT newid(),
CourseCode nvarchar(50) NOT NULL DEFAULT newid(),
CourseDescription nvarchar(MAX) NULL
)
Create Table Archived_Courses
(
CourseId uniqueidentifier NOT NULL PRIMARY KEY ,
CourseCode nvarchar(50) NOT NULL ,
CourseDescription nvarchar(MAX) NULL
)
这是你的解决方案,对我有用(唯一不同的是,我通过简单的选择课程代码得到了独特的身份)
Insert into Courses (CourseCode, CourseDescription) values ('MOD01', 'Module 1 description');
DECLARE @courseId uniqueidentifier
Select @courseId = CourseId from Courses where CourseCode = 'MOD01'
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
您确定,您的Onfrontise数据库中的Insert上没有生成您在Azure SQL数据库中没有的任何默认值吗?
塞巴斯蒂安