我使用DELETE语句的OUTPUT子句将其插入存档表中。
此代码在我的本地数据库上运行,没有问题。但是,在Azure数据库上运行时会出现一个错误,因为列值为null。
为什么这在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行受影响) Msg 515、级别16、状态2、第16行不能将值NULL插入'CourseName‘列、表’.dbo.ArchiveCoures‘;列不允许空值。插入失败。声明已被终止。
发布于 2015-12-08 08:57:11
我做了一个忏悔者,他实际上在我的SQL数据库上工作得很好:假设您有这样的东西:
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您是否确定,在您的OnPre前提数据库中插入时没有生成任何默认值,而在Azure SQL数据库中则没有这些默认值?
塞巴斯蒂安
https://stackoverflow.com/questions/34123067
复制相似问题