Как я меняю все пустые струны к ПУСТОМУ УКАЗАТЕЛЮ в таблице?

У меня есть таблица прежней версии приблизительно с 100 столбцами (nullable 90%). В тех 90 столбцах я хочу удалить все пустые строки и установить их в NULL. Я знаю, что могу:

update table set column = NULL where column = '';
update table set column2 = NULL where column2 = '';

Но это утомительно и подвержено ошибкам. Должен быть способ сделать это на целой таблице?

16
задан Ja͢ck 24 October 2012 в 03:32
поделиться

4 ответа

UPDATE
    TableName
SET
    column01 = CASE column01 WHEN '' THEN NULL ELSE column01 END,
    column02 = CASE column02 WHEN '' THEN NULL ELSE column02 END,
    column03 = CASE column03 WHEN '' THEN NULL ELSE column03 END,
    ...,
    column99 = CASE column99 WHEN '' THEN NULL ELSE column99 END

Это все еще делается вручную, но немного менее болезненно, чем то, что у вас есть, потому что это не требует отправки запроса для каждого столбца. Если вы не хотите заниматься написанием скриптов, вам придется смириться с определенным количеством боли при выполнении чего-то подобного.

Edit: Added the ENDs

38
ответ дан 30 November 2019 в 15:25
поделиться

Один из возможных сценариев:

for col in $(echo "select column_name from information_schema.columns
where table_name='$TABLE'"|mysql --skip-column-names $DB)
do
echo update $TABLE set $col = NULL where $col = \'\'\;
done|mysql $DB
11
ответ дан 30 November 2019 в 15:25
поделиться

Стандартного способа нет, но вы можете опросить системный каталог, чтобы получить соответствующие имена столбцов для соответствующей таблицы и сгенерировать SQL для этого. Вы также, вероятно, можете использовать выражение CASE для обработки всех столбцов за один проход - более крупный оператор SQL.

UPDATE Table
   SET Column1 = CASE Column1 = ' ' THEN NULL ELSE Column1 END,
       ...

Обратите внимание, что после создания большого оператора UPDATE вся работа выполняется на сервере. Это намного эффективнее, чем выбирать данные в клиентском приложении, изменять их там и записывать результат обратно в базу данных.

1
ответ дан 30 November 2019 в 15:25
поделиться

Думаю, вам нужно вывести каждую строку на такой язык, как C #, php и т. Д.

Что-то вроде:

rows = get-data()
foreach row in rows
    foreach col in row.cols
        if col == ''
            col = null
        end if
    next
next
save-data()
0
ответ дан 30 November 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: