【发布时间】:2018-11-26 03:35:52
【问题描述】:
我们已将 Oracle 数据库转换为 SQL Server。我们正面临 null 与空白的问题。
场景:
在甲骨文中:
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 数据库的行为类似。
【问题讨论】:
-
你是如何构建这些插入语句的?
-
最好更改插入查询,但您可以在表上创建触发器以将零长度字符串值更新为
NULL。触发器方法可能是在 SQL Server 中模拟非 ANSI SQL Oracle 行为的最简单方法。 -
@Dan Guzman:我可能错了,但我对在这种情况下使用触发器的建议感到有点惊讶。他们正计划迁移整个数据库,我认为 OP 的关注点可能不仅仅在于该表中的单个列,这可能意味着使用多个触发器?是否建议在他们的迁移工具/脚本中解决这个问题,该工具/脚本为空列放置空白字符串,同时从 Oracle 检索?
-
@KaushikNayak,我的理解是迁移到 SQL Server 已经完成。问题在于应用程序
INSERT查询指定一个空字符串来存储NULL值。触发方法将避免更改应用程序代码,但仅作为一种解决方法,直到可以更改应用程序代码。
标签: sql-server oracle