I have three tables in SQL Server 2008 R2: Country
Address
and Country_Address
Country
has columns:
CountryID
Country
1, Afghanistan
2, Australia
Address
has columns:
AddressID
Address
1, 5 Smith Way
Country_Address
has columns:
CountryID
AddressID
1, 1
edit: so in the example, 5 smith way is an address for Afghanistan.
I have emptied the tables, then added two countries and one address, and then a link in Country_Address
between 1 and 1. When I try to update the CountryID
from 1 to 2, I can’t because of FK constraint. I don’t understand why this is, because the CountryID
I am trying to assign does exist. So how do I manage to update it?
edit1: This is the error I get when I try to do the update in SQL Management Studio, I get InvalidOperationException
— «The model of type ‘…’ could not be updated.» in Visual Studio.
No row was updated.
The data in row 1 was not committed.
Error Source: .Net SqlClient Data
Provider. Error Message: The UPDATE
statement conflicted with the FOREIGN
KEY constraint
«FK_Country_Address_Address». The
conflict occurred in database
«…», table
«dbo.Address», column ‘AddressID’.The statement has been terminated.
случилось первый раз 3 недели назад
веб запрос типа:
C# | ||
|
на изменение записи в таблице SQL сервера выдал ошибку.
в тоже самое время изменение других записей этой же таблице отрабатывается нормально.
пробую изменить «противную» строку через SQL Server Management Studio прямо в таблице…
ага.
«Строки не были обновлены.
Данные в строке не были зафиксированы.
Источник ошибки: .Net SqlClient Data Provider.
Сообщение об ошибке: Время ожидания выполнения истекло…»
запросом:
SQL | ||
|
— выполнение зависает, долго не жду — останавливаю, так как «подвисает» вся база.
ничего толкового сделать не успел. проблема «рассосалась» сама через некоторое время.
сегодня повторилось тоже самое.
что с этим делать? как бороться?
SQL Server Express (64-bit) 2012
Напишите, пожалуйста, любой пример триггера, выдающего сообщение при ошибке. Хоть какой..
Modus
8,83525 серебряных знаков65 бронзовых знаков
задан 21 ноя 2011 в 14:33
CREATE
TRIGGER HotelSuitesSchedule_upd
ON dbo.HotelSuitesSchedule
for UPDATE
AS
begin
--
SET NOCOUNT ON
--
declare @n as int
if exists
(select i.id
from inserted i inner join deleted d on i.id = d.id
where (i.seat1>0 and d.seat1>0 and i.seat1<>d.seat1) or
(i.seat2>0 and d.seat2>0 and i.seat2<>d.seat2))
begin
select @n=hs.RoomNumber
from inserted i inner join deleted d on i.id = d.id
left join HotelSuites hs with(nolock) on i.ID_HotelSuite=hs.ID
where (i.seat1>0 and d.seat1>0 and i.seat1<>d.seat1) or
(i.seat2>0 and d.seat2>0 and i.seat2<>d.seat2)
RAISERROR ('Место в номере № %d уже забронировано!', 16, 1,@n) with SETERROR
end
end
ответ дан 21 ноя 2011 в 16:35
minamotominamoto
4,01113 серебряных знаков19 бронзовых знаков
Для MSSQL, вешаем на таблицу dbo.MyTable
триггер на вставку:
CREATE TRIGGER dbo.MyTable_OnInsert ON dbo.MyTable
AFTER INSERT
AS
BEGIN
DECLARE @name VARCHAR(255)
SELECT @name=i.name FROM inserted i
IF @name ='Foo'
RAISERROR ('Внимание! Попытка записать Foo!', 16, 1)
END
Если теперь попытаться добавить строку, содержащую в качестве поля name
строковое выражение 'Foo'
, получим сообщение об ошибке:
————————— Среда Microsoft SQL Server Management Studio
Express
————————— Ни одной строки не было обновлено.Данные в строке 1 не были
зафиксированы. Источник ошибки: .Net
SqlClient Data Provider. Сообщение об
ошибке: Внимание! Попытка записать
Foo!Исправьте ошибку и повторите попытку
или нажмите клавишу ESC, чтобы
отменить изменения.
————————— ОК Справка
ответ дан 21 ноя 2011 в 16:35
Nofate♦Nofate
34.3k15 золотых знаков65 серебряных знаков93 бронзовых знака
5
Для MSSQL, вешаем на таблицу dbo.MyTable
триггер на вставку:
CREATE TRIGGER dbo.MyTable_OnInsert ON dbo.MyTable
AFTER INSERT
AS
BEGIN
DECLARE @name VARCHAR(255)
SELECT @name=i.name FROM inserted i
IF @name ='Foo'
RAISERROR ('Внимание! Попытка записать Foo!', 16, 1)
END
Если теперь попытаться добавить строку, содержащую в качестве поля name
строковое выражение 'Foo'
, получим сообщение об ошибке:
————————— Среда Microsoft SQL Server Management Studio
Express
————————— Ни одной строки не было обновлено.Данные в строке 1 не были
зафиксированы. Источник ошибки: .Net
SqlClient Data Provider. Сообщение об
ошибке: Внимание! Попытка записать
Foo!Исправьте ошибку и повторите попытку
или нажмите клавишу ESC, чтобы
отменить изменения.
————————— ОК Справка
При попытке добавить данные во вновь созданный столбец с помощью SQL Server Management Studio (редактирование строк) я получаю следующую ошибку:
Ни одна строка не была обновлена.
Данные в строке 1 не были зафиксированы.
Источник ошибки: поставщик данных.Net SqlClient.
Сообщение об ошибке: строка или двоичные данные будут усечены.
Заявление было прекращено.
Исправьте ошибки и повторите попытку или нажмите ESC, чтобы отменить изменения.
Тип данных для столбца — nvarchar(150).
ОБНОВИТЬ:
Я вставляю только несколько символов ascii (пример: abc).
Это чужая база данных, которая попросила меня разобраться в ней… Я обнаружил: а) только некоторые строки дают эту ошибку б) строки, дающие эту ошибку, имеют длинные строки в двух других столбцах (один из них — nvarchar (max) и один — это текст).
2010-03-01 15:01
3
ответа
Решение
Я испытал это в тех случаях, когда на столе была смесь ntext
а также nvarchar(MAX)
типы данных. Меняя все ntext
с nvarchar(MAX)
с исправляет проблему.
2014-05-28 09:16
Эта ошибка обычно возникает, когда вы превышаете длину типа данных для столбца. Вы вставляете более 150 символов в столбец?
2010-03-01 18:12
Я получил эту ошибку, когда по ошибке превысил количество символов, которое может содержать поле. В Visual Studio я по ошибке вставил поле с его типом данных как nvarchar(1) и пытался сохранить слово с 6 символами в этом поле. Как только я перешел на nvarchar (50), он работал нормально. Надеюсь, это кому-нибудь поможет.
Dev
07 май ’15 в 16:19
2015-05-07 16:19
2015-05-07 16:19
Обычно это происходит при попытке вставить больше символов, чем указано в этом поле. идти к
Design
, проверить
Data Type
поля для примера ваш
Data Type = nvarchar(20)
и ваш пробный набор 30 символов
Microsoft SQL Server 2014
28 янв ’20 в 15:59
2020-01-28 15:59
2020-01-28 15:59