小编Ale*_*exC的帖子

如何在 Postgres 中的 CASE 表达式上创建索引

我正在尝试在 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

postgresql postgresql-9.5

9
推荐指数
1
解决办法
4718
查看次数

XACT_ABORT ON 在 SQL Server 2012 上没有按预期工作?

看起来 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)

sql-server error-handling sql-server-2012

5
推荐指数
1
解决办法
2415
查看次数