Процедура удаления столбца SQLite - PullRequest
8 голосов
/ 22 октября 2010

Мне нужно написать процедуру DROP COLUMN для работы с базами данных SQLite.

Это можно назвать примерно так:

dropColumn("SomeTable", "SomeColumn");

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

Не должно быть слишком сложно включить это в процедуру.Но, похоже, это было бы довольно неприятно писать.

Конечно, кто-то там уже написал такую ​​рутину.Если так, могу я украсть это, пожалуйста?:)

1 Ответ

5 голосов
/ 17 февраля 2011

Вот вам псевдокод:

columnNameList = ""
newTableStr = "CREATE TABLE tempMyTable ("
execute statement: "PRAGMA table_info('MyTable')"
While looping through RecordSet
  If RecordSet.name != tableRowToDeleteName
    If columnNameList != "" Then columnNameList += ","
    columnNameList += RecordSet.name

    newTableStr += RecordSet.name + " " + RecordSet.type
    If RecordSet.notnull Then
      newTableStr += " NOT NULL"
    End If
    If RecordSet.dflt_value != "" Then
      newTableStr += " DEFAULT(" + RecordSet.dflt_value + ")"
    End If
    If Not Last Record in RecordSet
      newTableStr += ","
    End If
  End If
End Loop
newTableStr += ");"

execute statement: newTableStr
execute statement: "INSERT INTO tempMyTable (" + columnNameList + ")" + 
                   "SELECT " + columnNameList + " FROM MyTable;"

Delete table: MyTable
Rename Table: tempMyTable to MyTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...