使用azure sql中的OUTPUT子句删除语句

时间:2015-12-06 21:34:43

标签: sql-server azure azure-sql-database

我正在使用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失败。声明已经终止。

1 个答案:

答案 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数据库中没有的任何默认值吗?

塞巴斯蒂安