SQL Serverバックエンドを備えたC#アプリがあります。バックエンドには2つのテーブルがあります。
MyTable
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
この問題の原因となっているフィールドを特定する方法はありますか?また、診断に役立つデータベーストリガー内でデバッグする方法はありますか?
エラーがの変換によるものであるNVARCHAR
とDATETIME
。ではMyTable
、列Name
はLastUpdated
列の前に配置されます。つまり、両方のテーブルの列の順序は同じではありません。INSERT
ステートメントで列を指定する必要があります。
INSERT INTO MyTableHistory(
Id,
[Timestamp],
IsDeleted,
Name,
LastUpdated,
LastUpdatedBy
)
SELECT
Id,
[Timestamp],
IsDeleted,
Name,
LastUpdated,
LastUpdatedBy
FROM deleted
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加