2017-02-17 43 views
0

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

有一个为nvarchar(最大值)列可以包含用于某些行日期或日期时间值。这些行我怀疑是导致此错误的行。研究了一下,但还没有找到解决方案。如果我尝试更新某些值或插入数据,但不想删除,我会理解此错误。这是我的查询。

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] 
+2

是否有任何触发器,在火灾中删除? – Kostis

+1

你没有'Where'子句。为什么不只是“截断”桌子? –

回答

1

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

什么你试图做了数据丢失的巨大潜力,因为你没有指定使用where一定的条件下,我假设查询选项设置默认为SET IMPLICIT_TRANSACTIONS OFF,它会自动提交delete命令。

回到你的问题,你可以尝试检查SET STATISTICS IO ON,并尝试使用BEGIN TRAN tran1 delete from [dbo].[Field],结果消息将更加翔实点点。搞清楚它是否是DML触发器阻止你删除后,再最后做COMMIT TRAN tran1

+0

没有触发器。有依赖于表格的视图和视图上的一些索引来加速读取数据。在使用另一个数据库的数据更新表之前,删除需要清除所有数据。我怀疑我可能需要删除使用此表的视图上的所有索引以进行删除工作。我的问题仍然是,为什么会发生?即使有关于相关视图的索引,对我来说也没有意义。 – Ahpitre

+0

如果表视图中的一员,我猜测认为与'WITH SCHEMABINDING'选项,这将阻止你,你删除视图之前修改基础表中的所有数据变化所造成。 – LONG

+0

如果Schemabinding是问题,那么是否需要从相关视图中删除所有索引?这看起来像一个错误,因为这不应该阻止我删除数据。如果我想修改数据类型,删除列等,但删除数据的时候有没有父母我会明白/子关系船约束(这做执行SQL规则,以避免删除/更新与另一个表中的数据)应不挑衅这一点。 – Ahpitre