我正在嘗試使用包含換行符的默認字串向 SQLITE 中的表添加一列。我的印象是以下應該有效:
-- x'0a' is the literal for a new line
ALTER TABLE customer
ADD mailfooter TEXT NOT NULL DEFAULT 'With best regards' || x'0a' || 'Superdupa Company';
為了產生以下列內容:
With best regards
Superdupa Company
這雖然給出了以下錯誤:near "||": syntax error
然后我嘗試在 DEFAULT 值周圍添加括號,如下所示:
ALTER TABLE customer
ADD mailfooter TEXT NOT NULL DEFAULT ('With best regards' || x'0a' || 'Superdupa Company');
現在錯誤如下:Cannot add a column with non-constant default
有趣的是,當在 select 陳述句中使用時,這兩種變體都有效:
SELECT 'With best regards' || x'0a' || 'Superdupa Company';
或者
SELECT ('With best regards' || x'0a' || 'Superdupa Company');
兩者都產生預期的結果而沒有錯誤。
如何在默認值中添加帶有換行符的列?
uj5u.com熱心網友回復:
運算式周圍的括號DEFAULT是語法的必需部分。
這對我有用:
sqlite> CREATE TABLE foo(bar, baz NOT NULL DEFAULT ('some' || char(0x0A) || 'text'));
sqlite> INSERT INTO foo(bar) VALUES(1);
sqlite> SELECT * FROM foo;
bar baz
--- ---------
1 some
text
就像您嘗試過的那樣在運算式中使用 blob 文字 ( ('some' || x'0A' || 'text'))。
在 Sqlite 3.35.5 上使用ALTER TABLE ... ADD COLUMN ...相同的約束對我來說失敗,但適用于 Sqlite 3.38.5。我在兩個版本之間的更改日志中沒有看到任何直接參考此內容的內容,但顯然兩者之間發生了一些更改,以使有效性檢查ALTER TABLE更符合CREATE TABLE.
所以,更新到最新的 Sqlite 版本,你應該沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490794.html
