sreenivasaraok Ответов: 1

Миграция oracle на SQL server - null vs empty


Мы преобразовали базу данных Oracle в базу данных SQL server. Мы столкнулись с проблемой null vs blank.

Сценарий:

в Oracle:

Создать таблицу Student (Sno int, FName varchar(20) not null, MName varchar(30) null,
Lname varchar(20) not null)

Вставить в студенческие годы(СНО имени,Mname,lname в) ценности (10,'Джеймс' ,",'Кларк')

Запись вставляется в Oracle как среднее имя вставляется как null даже если мы передали пустое значение(")
10,Джеймс,нуль,Кларк

Запись вставки в SQL Server в качестве среднего имени вставки как пустого в SQL server (показывая пустое пространство в таблице, даже у нас есть ограничение по умолчанию)
10,Джеймс, Кларк


мы хотим обрабатывать, когда пустая (") вставка в таблицу SQL должна рассматриваться как "null", что аналогично поведению базы данных Oracle.

Что я уже пробовал:

для некоторых существующих триггеров добавлено условие nullif. но у некоторых таблиц у нас нет триггеров и того, как обрабатывать эти таблицы, когда происходит вставка или обновление.

0x01AA

Я бы сказал, что MSSQL прав. Пустая строка-это _не_ нуль ;)
Вставить в студенческие годы(СНО имени,Mname,lname в) ценности (10,'Джеймс' ,значение null,'Кларк') - это правильный путь

1 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Это известная проблема Oracle (ну, это точка зрения, но SQL-92 не согласен с Oracle, но Oracle говорит, что он был здесь первым)...
Опасный оракул пустую строку как значение NULL (это внутренний разговор).
Я бы не советовал заставлять SQL угрожать пустой строкой, как это делает Oracle, по двум причинам:
1. ANSI SQL говорит, что Oracle ошибается
2. это будет выступление с большим количеством вставок со строковыми переменными
Однако если вы не можете пропустить один из них:
1. Используйте триггеры
2. оберните вставку в SQL
3. Измените код вставки в приложении


0x01AA

Цитата: "это внутренний разговор"
разговор/конверсия/конвенция?
Во всяком случае, 5.