Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Создано несколько таблиц. Внешних ключей с каскадном обновлением и удалением.
Все работало. Структуру не изменяла.
А сейчас пытаюсь изменить поле Id и выдается ошибка.
Может кто знает где искать причины?

К сообщению приложен файл. Размер - 63Kb
13 ноя 13, 15:50    [15122510]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Tanya_0306
Может кто знает где искать причины?

В коде, который выполняет сервер

Tanya_0306
Все работало. Структуру не изменяла.

И триггера тоже "не изменяла" ?
13 ноя 13, 15:52    [15122530]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Glory,

Триггера создавала. Но они этой таблицы не касаются. На другое поле ....
13 ноя 13, 17:42    [15123728]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Tanya_0306
Glory,

Триггера создавала. Но они этой таблицы не касаются. На другое поле ....

Триггер создаётся на таблицу, а не на поле.
Покажите текст триггера.
13 ноя 13, 17:44    [15123762]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Гость333,

CREATE TRIGGER [dbo].[upd_Params_Measurements]
	ON  [dbo].[Measurements] 
	FOR  UPDATE
AS
	SET NOCOUNT ON
	BEGIN
		UPDATE dbo.Params set Measurement=(select id from inserted)
		where  Measurement=(select id from deleted)

	        UPDATE dbo.Volumes set Measurement=(select id from inserted)
		where  Measurement=(select id from deleted)

		UPDATE dbo.Waybills set Measurement=(select id from inserted)
		where  Measurement=(select id from deleted)
	END
	
GO
13 ноя 13, 18:27    [15124034]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Tanya_0306,

А, это у вас кривая структура БД и внешние ключи с циклическими ссылками.
Неа, не взлетит.
13 ноя 13, 18:34    [15124067]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Я меняю таблицу Clients.
связь в Waybills есть поле Client (внешний ключ к таблице Clients).
в таблице waybills есть поле measurement (внешний ключ таблицы measurement).

Но при изменении Сlients триггеры не должны срабатывать ....
13 ноя 13, 18:34    [15124070]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
KRS544
Member

Откуда:
Сообщений: 497
В таблице, которую правите две одинаковые записи.
Правка запросом (Update), а не из студии, проходит?
13 ноя 13, 18:50    [15124122]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
KRS544,

Может я "глупость" счас скажу. У меня первичный ключ - поле типа varchar(25).
Я пытаюсь его изменить (его значение по прежнему уникально в таблице) и ошибка.
А если меняю другое поле таблице - все нормально..
Почему? Ведь идентификатор может быть текстом.... И менять его можно .....
13 ноя 13, 19:53    [15124318]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
KRS544
Member

Откуда:
Сообщений: 497
Да нет, в случае повторения ключа выползет ошибка про примари кей.
Тогда, скорее всего, искать в "каскадном обновлением"
13 ноя 13, 20:15    [15124381]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Tanya_0306
Почему? Ведь идентификатор может быть текстом.... И менять его можно .....

Только вот запросы в любом соучае придется писать правильные
А ваш запрос нарушает то, что сказано в сообщении об ошибке
13 ноя 13, 20:27    [15124443]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
Glory,

каким образом нарушает ??
13 ноя 13, 20:44    [15124516]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
Tanya_0306
Glory,

каким образом нарушает ??
Очевидно, обновление clients каскадно затрагивает какую то таблицу с кривым триггером.

А кривой триггер из за кривых запросов, так писать нельзя:
UPDATE dbo.Waybills set Measurement=(select id from inserted)
		where  Measurement=(select id from deleted)

Посмотрите в профайлере, к чему приводит изменение поля в SSMS, какие запросы посылаются серверу, станет понятнее.
13 ноя 13, 21:32    [15124638]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
alexeyvg,

тригерра отключила. все равно не дает исправить.
а как правильно тригерр написать? чего то везде навароченные тригерра ...
13 ноя 13, 22:09    [15124715]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
пересоздала таблицу clients и внешний ключ из таблицы
waybills и все измения проходят нормально.
13 ноя 13, 22:42    [15124797]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
Tanya_0306
Member

Откуда:
Сообщений: 272
alexeyvg,

тригерра отключила. все равно не дает исправить.
а как правильно тригерр написать? чего то везде навароченные тригерра ...
13 ноя 13, 22:49    [15124821]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при изменении данных в ячейки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
Tanya_0306
а как правильно тригерр написать? чего то везде навароченные тригерра ...
Я же написал: триггер должен содержать правильные запросы, и показал запрос с ошибкой.

Вот его надо поменять.

Вообще про любую запись вида "ххх=(select ...)" можно без большого риска ошибиться сказать, что она ошибочна (хотя синтаксически онва правильная)
Нельзя присваивать множество в скалярную переменную (или в поле таблицы)!
14 ноя 13, 00:45    [15125195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить