我正在尝试在 CASE 表达式上创建索引,如下所示
CREATE TABLE test(i INT, j INT);
CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j END);
Run Code Online (Sandbox Code Playgroud)
收到此错误:
ERROR: syntax error at or near "CASE"
LINE 1: CREATE UNIQUE INDEX test_index ON test(CASE WHEN i=1 THEN j ...
^
********** Error **********
ERROR: syntax error at or near "CASE"
SQL state: 42601
Character: 40
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Postgres 9.5.2
看起来 XACT_ABORT ON 没有按预期工作。这是一个表和一个插入其中的过程:
CREATE TABLE rain
(
rain_time DATETIME ,
location VARCHAR(100)
);
GO
CREATE PROCEDURE insert_rain
@rain_time DATETIME ,
@location VARCHAR(100)
AS
BEGIN;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
PRINT 'before insert';
INSERT INTO rain
( rain_time, location )
VALUES ( @rain_time, @location );
PRINT 'after insert';
COMMIT;
END;
GO
Run Code Online (Sandbox Code Playgroud)
我创建了一个触发器来模拟运行时错误:
CREATE TRIGGER rain_no_insert
ON rain
FOR INSERT
AS
RAISERROR('Cannot insert', 16, 1);
GO
Run Code Online (Sandbox Code Playgroud)
当我调用插入过程时,我确实收到了错误,但执行并没有停止,因为最后一个 PRINT 打印了它的“插入后”消息:
EXEC insert_rain
@rain_time = '2015-03-30 12:34:56',
@location = 'Wautoma, WI';
before insert …
Run Code Online (Sandbox Code Playgroud)