Tsql T-SQL:从字符串转换日期和/或时间时,转换失败
下面是用于捕获SQL表上的更新/插入的触发器。我不知道为什么,但每当更新完成时,我都会收到错误消息转换失败,从字符串转换日期和/或时间。以下是事务日志表的结构:Tsql T-SQL:从字符串转换日期和/或时间时,转换失败,tsql,triggers,Tsql,Triggers,下面是用于捕获SQL表上的更新/插入的触发器。我不知道为什么,但每当更新完成时,我都会收到错误消息转换失败,从字符串转换日期和/或时间。以下是事务日志表的结构: CREATE TABLE [dbo].[TransactionLog]( [Id] [int] IDENTITY(1,1) NOT NULL, [TransactionDate] [datetime] NOT NULL, [Operator] [varchar](35) NOT NULL, [TableN
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
试一试
我使用了varchar
,因为如果要在末尾将字符串强制转换为char
,那么使用nvarchar
似乎毫无意义
此外,您可能需要将CONVERT
与样式一起使用,而不是CAST
来存储有用的内容<代码>选择CAST(getdate()作为nvarchar(9))为我返回20年9月28日的
这是插入触发器之前还是之后?
+ ' DateTaken:' + ISNULL(CAST(DateTaken as varchar(9)), 'NULL')
+ ' ExpDate:' + ISNULL(CAST(ExpirationDate as varchar(9)), 'NULL')