6

テーブル [foo] (bar_id int 主キーの自動インクリメント、bar_name varchar) への t-sql 挿入クエリとテキストがあります。

INSERT INTO foo(bar_name)
VALUES (@bar_name_new);
IF @@ROWCOUNT > 0
    SELECT bar_id, bar_name
    FROM foo
    WHERE bar_id = scope_identity();

トリガーは、挿入後に bar_name フィールドを変更できます。そのため、「bar_name」フィールドを更新する必要があります。ここで、sqlite db で同じことを行う必要があります。私はこれを書いた:

INSERT INTO foo(bar_name)
VALUES (@bar_name_new);

 SELECT bar_id, bar_name
 FROM foo
 WHERE bar_id = (SELECT last_insert_rowid());

sqlite changes() 関数を呼び出す db の変更数を確認できます。また、sqlite の case ステートメントについても知っています。しかし、changes() が 0 を返すときに select を実行する必要がないことを sqlite に伝えるにはどうすればよいでしょうか?

4

1 に答える 1

2

SQLite の SQL フレーバーには、T-SQL にある分岐構造とループ構造がありません。制御フロー ロジックは、ホスト言語で実行されます。

あなたの場合、sqlite3_changes関数が必要です。とにかく、取得する行があるかどうかを判断するために必要になります。where changes() > 0ただし、簡単さと効率の問題として、クエリ プランナーがすぐに返されるほどスマートである場合 は、クエリを実行することもできます。

于 2016-04-28T02:04:02.933 に答える