2

以下は、SQLテーブルの更新/挿入をキャプチャするために使用されるトリガーです。理由はわかりませんが、更新が行われるたびに、文字列から日付や時刻を変換するときに変換に失敗しましたというエラーメッセージが表示されます。トランザクションログテーブルの構造は次のとおりです。

CREATE TABLE [dbo].[TransactionLog](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [TransactionDate] [datetime] NOT NULL,
    [Operator] [varchar](35) NOT NULL,
    [TableName] [varchar](50) NOT NULL,
    [Action] [char](1) NOT NULL,
    [TableString] [nvarchar](255) NOT NULL,
    [UserId] [char](6) NULL,
 CONSTRAINT [PK_TransactionLog] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

更新されるテーブルは次のとおりです。

CREATE TABLE [dbo].[AgentContEd](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [sNumber] [int] NOT NULL,
    [StateCode] [char](3) NOT NULL,
    [CourseCode] [char](6) NOT NULL,
    [DateTaken] [date] NOT NULL,
    [ExpirationDate] [date] NULL,
    [CourseHours] [smallint] NOT NULL,
    [Method] [varchar](15) NULL,
    [LastChangeOperator] [char](8) NOT NULL,
    [LastChangeDate] [datetime] NOT NULL,
    [ControlId] [int] NULL,
 CONSTRAINT [PK_AgentContEd] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

そして、これが頭痛を引き起こしている引き金です...

BEGIN
    INSERT INTO dbo.TransactionLog 
    (
        TransactionDate, 
        Operator, 
        TableName, 
        Action, 
        TableString, 
        UserId
    )
    SELECT 
        LastChangeDate,
        'Op',
        @tableName,
        @action,
        CAST(
          'ID:'             + CAST(ISNULL(Id,             'NULL') as char(4))
        + ' SymNum:'        + CAST(ISNULL(sNumber,  'NULL') as char(10))
        + ' StateCode:'     + ISNULL(StateCode,           'NULL')
        + ' DateTaken:'     + CAST(ISNULL(DateTaken,      'NULL') as nvarchar(9))
        + ' ExpDate:'       + CAST(ISNULL(ExpirationDate, 'NULL') as nvarchar(9))
        + ' CourseCode:'    + ISNULL(CourseCode,          'NULL')
        + ' Hours:'         + CAST(ISNULL(CourseHours,    'NULL')  as char(3))
        + ' Mthd:'          + ISNULL(Method,              'NULL')
        As char(255)), 
        LastChangeOperator
    FROM inserted
END
4

1 に答える 1

1

試す

    + ' DateTaken:'     + ISNULL(CAST(DateTaken as varchar(9)),      'NULL')
    + ' ExpDate:'       + ISNULL(CAST(ExpirationDate as varchar(9)), 'NULL') 

とにかく最後に弦をキャストするつもりなら使うのは無意味varcharに思えるので使った。nvarcharchar

また、何か便利なものを保存するCONVERTのではなく、スタイルとともに使用する必要があるかもしれません。私のために戻ります。CASTSELECT CAST(getdate() as nvarchar(9))Sep 28 20

フォーマットのリストはこちら

于 2012-09-28T16:41:13.147 に答える