使用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]
答案 0 :(得分:1)
纯delete
命令不会给你这样的错误信息,我认为你在目标表中有一些其他的约束,比如在delete
命令之后将触发的DML触发器,它看起来它试图将字符串插入到date
或datetime
或datetime2
或datetimeoffset
的列中。确保字符串以正确的格式写入,或者您可以禁用触发器并尝试再次删除记录。
您尝试做的事情有很大的数据丢失潜力,因为您没有使用where
指定某个条件,我认为查询选项默认设置为SET IMPLICIT_TRANSACTIONS
OFF ,它将自动提交delete
命令。
回到你的问题,你可以尝试检查SET STATISTICS IO
ON,并尝试使用BEGIN TRAN tran1 delete from [dbo].[Field]
,结果消息将提供更多信息。在确定是否是DML触发器阻止您删除之后,最后执行COMMIT TRAN tran1