SQL Server错误删除日期

时间:2017-02-17 15:25:44

标签: sql sql-server-2012 sql-delete

使用SQL Server 2012,尝试删除表的内容。我收到“从字符串转换日期和/或时间时转换失败。”。

有一个nvarchar(Max)列,可能包含某些行的Date或DateTime值。我怀疑这些行是导致此错误的行。研究了一下,但还没有找到解决方案。如果我尝试更新某些值或插入数据,而不是删除,我会理解这个错误。这是我的疑问。

Delete From [dbo].[Field]

这是我的表:

CREATE TABLE [dbo].[Field](
[Id] [uniqueidentifier] NOT NULL,
[FormID] [uniqueidentifier] NOT NULL,
[Key] [nvarchar](300) NOT NULL,
[Value] [nvarchar](max) NULL,
 CONSTRAINT [PK_Field] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

1 个答案:

答案 0 :(得分:1)

delete命令不会给你这样的错误信息,我认为你在目标表中有一些其他的约束,比如在delete命令之后将触发的DML触发器,它看起来它试图将字符串插入到datedatetimedatetime2datetimeoffset的列中。确保字符串以正确的格式写入,或者您可以禁用触发器并尝试再次删除记录。

您尝试做的事情有很大的数据丢失潜力,因为您没有使用where指定某个条件,我认为查询选项默认设置为SET IMPLICIT_TRANSACTIONS OFF ,它将自动提交delete命令。

回到你的问题,你可以尝试检查SET STATISTICS IO ON,并尝试使用BEGIN TRAN tran1 delete from [dbo].[Field],结果消息将提供更多信息。在确定是否是DML触发器阻止您删除之后,最后执行COMMIT TRAN tran1