我们已将Oracle数据库转换为SQL Server。我们面临的问题是null vs blank。
情景:
在Oracle中:
Create table Student
(
Sno int,
FName varchar(20) not null,
MName varchar(30) null,
Lname varchar(20) not null
)
Insert into Student (Sno, Fname, Mname, Lname)
values (10, 'James' , '', 'Clark')
记录被插入到Oracle中,MName
被存储为null,即使我们将空字符串(''
)作为值传递。
10,James,null,Clark
但是,插入到SQL Server中的行将MName
存储为空字符串,显示表中的空白区域,即使我们有默认约束。
10,James,,Clark
我们希望处理作为''
插入到SQL Server表中的空字符串(null
),这是Oracle数据库的类似行为。
答案 0 :(得分:0)
处理此问题的一种方法是使用NULLIF()
功能。在您的示例INSERT语句中,您可以说
Insert into Student(Sno,Fname,Mname,Lname)
values (@varSno,@varFname ,NULLIF(@varMname, ''),@varLname)
在UPDATE中,它可能像
一样使用UPDATE STUDENT
SET Fname = @varFname,
Mname = NULLIF(@varMname, ''),
Lname = @varLname
WHERE Sno = @varSno
祝你好运。