SQLServerを使用した自動インクリメントによるネストされたエンティティの挿入

Vadim Ovchinnikov

同じタイプのプロパティを持つクラスがあるとします(クラスについてはC#で説明しますが、ここでは関係ありません)

class Exception
{
    public string Message { get; set; }

    public string StackTrace { get; set; }

    public Exception InnerException { get; set; }
}

上記のコードからわかるように、ネストされた例外を持つ例外クラスがあります。

これらの例外を格納するためのテーブルを作成しましょう

CREATE TABLE Exceptions
(
    Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Message] NVARCHAR(MAX) NOT NULL,
    StackTrace NVARCHAR(MAX) NULL,
    InnerExceptionId INT NULL,
    CONSTRAINT FK__Exceptions_Id__Exceptions_InnerExceptionId
        FOREIGN KEY(InnerExceptionId) REFERENCES Exceptions (Id)
);

もちろん、正しく機能するコードを作成することもできます。たとえば、TVPを引数として受け取り、TVPの行をループして、新しい行を1つずつ挿入するストアドプロシージャなどです。

しかし、ネストを使用して例外をエレガントに挿入できるSQLコードはありますか?

Vadim Ovchinnikov

TVPとカーソルループを使用してストアドプロシージャを作成することになりました。

これが私のテーブル値パラメーターの定義です:

CREATE TYPE ExceptionTableType AS TABLE
(
    [Message] NVARCHAR(MAX) NOT NULL,
    StackTrace NVARCHAR(MAX) NULL
);

カーソルループ付きのストアドプロシージャは次のとおりです

CREATE PROCEDURE LogException
    @exceptions ExceptionTableType READONLY
AS
BEGIN
    DECLARE @cursor CURSOR;

    DECLARE @message NVARCHAR(MAX);
    DECLARE @stackTrace NVARCHAR(MAX);

    DECLARE @innerExceptionId INT = NULL;

    DECLARE @outputTable TABLE (Id INT);

    BEGIN
        SET @cursor = CURSOR FOR
        SELECT [Message], StackTrace
        FROM @exceptions;

        OPEN @cursor
        FETCH NEXT FROM @cursor
        INTO @message, @stackTrace;

        WHILE @@FETCH_STATUS = 0
        BEGIN
            INSERT INTO Exceptions
            ([Message], StackTrace, InnerExceptionId)
            OUTPUT INSERTED.Id INTO @outputTable (Id)
            VALUES
            (@message, @stackTrace, @innerExceptionId);

            SELECT @innerExceptionId = Id
            FROM @outputTable;

            FETCH NEXT FROM @cursor
            INTO @message, @stackTrace;
        END;

        CLOSE @cursor;
        DEALLOCATE @cursor;
    END
END

SQLを介したストアドプロシージャ呼び出しの例:

DECLARE @exceptions AS ExceptionTableType;

INSERT INTO @exceptions
([Message], [StackTrace])
VALUES
('My exception', 'Some stack trace here'),
('My inner exception', 'Dummy data'),
('My inner exception 2', 'Dummy data 2');

EXEC LogException @exceptions;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mysqlの自動インクリメントされたフィールドIDをphpに挿入し、あるテーブルのIDを別のテーブルに更新するにはどうすればよいですか?

分類Dev

スリック-自動インクリメントキーでリンクされた2つのテーブルに行を挿入しますか?

分類Dev

新しく挿入された部屋エンティティの主キーを自動的に更新する

分類Dev

Sequelize-ネストされたエンティティの条件を使用してクエリを検索する

分類Dev

生成されたC#ODataクライアントコードを使用して、複数のネストされたエンティティを持つエンティティを要求するにはどうすればよいですか?

分類Dev

特定のディレクトリに作成された特定の拡張子の新しいファイルにテンプレートコードを自動挿入するにはどうすればよいですか?

分類Dev

主キーのJPA @AutoGeneratedは、ネストされたエンティティに親シーケンス/自動検査を使用します

分類Dev

どのようにMapStructを使用して、ネストされたリストを持つ単一のDTOにエンティティとエンティティのリストをマッピングするには?

分類Dev

インポートステートメント/自動入力を改善するために、ディレクトリ内のすべてのインターフェイスをエクスポートします

分類Dev

自動インクリメントを使用したMySQL挿入

分類Dev

メインエンティティからIDを取得し、normalizrでネストされたエンティティにラップする方法

分類Dev

テーブルに挿入し、別の列を自動インクリメントされた列値に設定します

分類Dev

エンティティへのネストされたクエリリンク

分類Dev

自動インクリメントによって作成された1つのテーブルから2番目のテーブルに外部キーとして主キーを挿入するにはどうすればよいですか?

分類Dev

vb.net2010でステートメントを挿入した後に自動インクリメント値を取得する方法

分類Dev

ネストされたステートメントを使用したMSSQL挿入

分類Dev

フィルタリングされたネストされたドキュメントによるNESTエラスティックソート

分類Dev

インタラクティブな入力のために自動化されたbashスクリプトでエイリアスではなく保存された値を送信する方法

分類Dev

リクエストjsonから春にネストされたエンティティを作成する

分類Dev

別のテーブルに行を挿入したときに、あるテーブルの値を自動インクリメントする方法

分類Dev

NavigationViewフラグメントにネストされたViewPagerフラグメントのアイテムのクリックイベントからアクティビティcontainerViewIdを取得するにはどうすればよいですか?

分類Dev

javax.ejb.EJBException:エンティティマネージャを使用してDerbyデータベーステーブルにレコードを挿入しているときにトランザクションが中止されました

分類Dev

javax.ejb.EJBException:エンティティマネージャを使用してDerbyデータベーステーブルにレコードを挿入しているときにトランザクションが中止されました

分類Dev

どのように自動的にJavaで使用されているすべてのサードパーティのコンポーネントをリスト+プロジェクトを反応させるために?

分類Dev

アンドロイドスタジオでテキスト選択後に自動アクティブ化されたムードを挿入

分類Dev

Entity Framework Core 2.2 C#が、既存のネストされたエンティティとともに新しいエンティティを挿入するときにエラーで応答するのはなぜですか

分類Dev

反乱APIでquarkusリアクティブmysqlクライアントを使用するトランザクションでmysqlに最後に挿入されたIDを挿入して取得するにはどうすればよいですか?

分類Dev

選択したプロパティを使用して、ドロップダウンリストを使用してクエリを挿入のパラメータを選択するにはどうすればよいですか?

分類Dev

エンティティにネストされたリンクは奇妙な結果を合計します

Related 関連記事

  1. 1

    mysqlの自動インクリメントされたフィールドIDをphpに挿入し、あるテーブルのIDを別のテーブルに更新するにはどうすればよいですか?

  2. 2

    スリック-自動インクリメントキーでリンクされた2つのテーブルに行を挿入しますか?

  3. 3

    新しく挿入された部屋エンティティの主キーを自動的に更新する

  4. 4

    Sequelize-ネストされたエンティティの条件を使用してクエリを検索する

  5. 5

    生成されたC#ODataクライアントコードを使用して、複数のネストされたエンティティを持つエンティティを要求するにはどうすればよいですか?

  6. 6

    特定のディレクトリに作成された特定の拡張子の新しいファイルにテンプレートコードを自動挿入するにはどうすればよいですか?

  7. 7

    主キーのJPA @AutoGeneratedは、ネストされたエンティティに親シーケンス/自動検査を使用します

  8. 8

    どのようにMapStructを使用して、ネストされたリストを持つ単一のDTOにエンティティとエンティティのリストをマッピングするには?

  9. 9

    インポートステートメント/自動入力を改善するために、ディレクトリ内のすべてのインターフェイスをエクスポートします

  10. 10

    自動インクリメントを使用したMySQL挿入

  11. 11

    メインエンティティからIDを取得し、normalizrでネストされたエンティティにラップする方法

  12. 12

    テーブルに挿入し、別の列を自動インクリメントされた列値に設定します

  13. 13

    エンティティへのネストされたクエリリンク

  14. 14

    自動インクリメントによって作成された1つのテーブルから2番目のテーブルに外部キーとして主キーを挿入するにはどうすればよいですか?

  15. 15

    vb.net2010でステートメントを挿入した後に自動インクリメント値を取得する方法

  16. 16

    ネストされたステートメントを使用したMSSQL挿入

  17. 17

    フィルタリングされたネストされたドキュメントによるNESTエラスティックソート

  18. 18

    インタラクティブな入力のために自動化されたbashスクリプトでエイリアスではなく保存された値を送信する方法

  19. 19

    リクエストjsonから春にネストされたエンティティを作成する

  20. 20

    別のテーブルに行を挿入したときに、あるテーブルの値を自動インクリメントする方法

  21. 21

    NavigationViewフラグメントにネストされたViewPagerフラグメントのアイテムのクリックイベントからアクティビティcontainerViewIdを取得するにはどうすればよいですか?

  22. 22

    javax.ejb.EJBException:エンティティマネージャを使用してDerbyデータベーステーブルにレコードを挿入しているときにトランザクションが中止されました

  23. 23

    javax.ejb.EJBException:エンティティマネージャを使用してDerbyデータベーステーブルにレコードを挿入しているときにトランザクションが中止されました

  24. 24

    どのように自動的にJavaで使用されているすべてのサードパーティのコンポーネントをリスト+プロジェクトを反応させるために?

  25. 25

    アンドロイドスタジオでテキスト選択後に自動アクティブ化されたムードを挿入

  26. 26

    Entity Framework Core 2.2 C#が、既存のネストされたエンティティとともに新しいエンティティを挿入するときにエラーで応答するのはなぜですか

  27. 27

    反乱APIでquarkusリアクティブmysqlクライアントを使用するトランザクションでmysqlに最後に挿入されたIDを挿入して取得するにはどうすればよいですか?

  28. 28

    選択したプロパティを使用して、ドロップダウンリストを使用してクエリを挿入のパラメータを選択するにはどうすればよいですか?

  29. 29

    エンティティにネストされたリンクは奇妙な結果を合計します

ホットタグ

アーカイブ