「文字列から日付や時刻を変換するときに変換に失敗しました」というエラーが発生するSQLServerトリガーをデバッグするにはどうすればよいですか?

レオラ

SQL Serverバックエンドを備えたC#アプリがあります。バックエンドには2つのテーブルがあります。

  1. MyTable
  2. MyTableHistory

MyTableHistory更新を行うときにエントリを挿入するトリガーを追加しましたMyTableこのトリガーを追加すると、エラーが発生します。

文字列から日付や時刻を変換するときに変換に失敗しました

トリガーは次のとおりです。

CREATE TRIGGER [TU_MyTable]
ON dbo.[MyTable]
AFTER UPDATE
AS
   SET NOCOUNT ON

   INSERT INTO dbo.[MyTableHistory]
       SELECT * 
       FROM deleted
   GO

これが私のテーブルスキーマです

CREATE TABLE dbo.[MyTable] 
(
    [Id] int IDENTITY NOT NULL
    CONSTRAINT [PK_MyTable] PRIMARY KEY,
    [Timestamp] NOT NULL,
    [IsDeleted] bit NOT NULL,
    [Name] nvarchar(200) NOT NULL,
    [LastUpdated] datetime NOT NULL,
    [LastUpdatedBy] nvarchar(50) NOT NULL
)
GO

これが履歴テーブルスキーマです

CREATE TABLE dbo.[MyTableHistory] 
(
    [Id] int NOT NULL,
    [Timestamp] binary(8) NOT NULL,
    [IsDeleted] bit NOT NULL,
       CONSTRAINT [PK_MyTableHistory] PRIMARY KEY ([Id], [Timestamp]),
    [LastUpdated] datetime NOT NULL,
    [LastUpdatedBy] nvarchar(50) NOT NULL,
    [Name] nvarchar(200) NOT NULL
)
GO

この問題の原因となっているフィールドを特定する方法はありますか?また、診断に役立つデータベーストリガー内でデバッグする方法はありますか?

Felix Pamittan

エラーがの変換によるものであるNVARCHARDATETIMEではMyTable、列NameLastUpdated列の前に配置されます。つまり、両方のテーブルの列の順序は同じではありません。INSERTステートメントで列を指定する必要があります

INSERT INTO MyTableHistory(
    Id,
    [Timestamp],
    IsDeleted,
    Name,
    LastUpdated,
    LastUpdatedBy
)
    SELECT
        Id,
        [Timestamp],
        IsDeleted,
        Name,
        LastUpdated,
        LastUpdatedBy
    FROM deleted

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ