2017-02-17 14 views
0

Использование SQL Server 2012, попытка удалить содержимое таблицы. Я получаю «Не удалось преобразовать при преобразовании даты и/или времени из символьной строки».Ошибки SQL Server, удаляющие дату

Существует столбец 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] 
+2

Есть ли триггер, который запускается при удалении? – Kostis

+1

У вас нет предложения 'Where'. Почему бы не просто «обрезать» таблицу? –

ответ

1

Чистый delete команда не даст вам такое сообщение об ошибке, я думаю, что есть некоторые другие ограничения, которые у вас есть в целевой таблице, такие как DML триггеры, которые будет срабатывать после команды delete, похоже, что она пыталась вставить строку в колонку, которая равна date или datetime или datetime2 или datetimeoffset. Убедитесь, что строка написана в правильном формате, или вы можете отключить триггер и попытаться удалить записи снова.

То, что вы пытались сделать, имеет большой потенциал потери данных, так как вы не указали определенное состояние с помощью where, и я предполагаю, что параметр запроса устанавливается по умолчанию в SET IMPLICIT_TRANSACTIONS OFF, которая будет автоматически совершать команду delete.

На вопрос, вы можете попытаться установить код SET STATISTICS IO и попытаться использовать BEGIN TRAN tran1 delete from [dbo].[Field], результат будет немного информативным. После выяснения, является ли это триггером DML, чтобы вы не удаляли, тогда, наконец, COMMIT TRAN tran1

+0

Нет триггеров. Есть взгляды, которые зависят от таблицы, и некоторые индексы в представлениях для ускорения чтения данных. Удаление должно уничтожить все данные до обновления таблицы данными из другой базы данных. Я подозреваю, что мне может потребоваться отбросить все индексы в представлениях, которые используют эту таблицу, чтобы сделать работу «Удалить». Мой вопрос по-прежнему заключается в том, почему это происходит? Не имеет смысла для меня, даже если есть указатели на связанные взгляды. – Ahpitre

+0

Если таблица является одним из элементов представления, я предполагаю, что представление было создано с помощью опции «С СОХРАНЕНИЕМ», которая предотвратит изменение каких-либо изменений данных в базовых таблицах до того, как вы снимете представление. – LONG

+0

Если проблема с Schemabinding, то нужно ли мне удалить все индексы из связанных представлений? Это похоже на ошибку, поскольку это не мешает мне удалять данные. Я бы понял, пытаюсь ли я модифицировать типы данных, удалять столбцы и т. Д., Но удалять данные, если нет ограничений на отношения с родительским/дочерним отношением (которые применяют правила SQL, чтобы избежать удаления/обновления данных, относящихся к другой таблице), следует не спровоцировать это. – Ahpitre

 Смежные вопросы

  • Нет связанных вопросов^_^