Почему я не могу удалить (отредактировать) строку со значением xml в SSMS? - PullRequest
2 голосов

В SSMS 2008 R2 я выполняю:

create table aaa(col1 xml);
go
insert into aaa (col1)
values('<ccc>ddd</ccc>')
go 2

Затем откройте таблицу в SSMS (щелкнув правой кнопкой мыши по таблице в Обозревателе объектов) с параметром «Изменить верхние 200 строк», выберите строку, нажмите «Удалить» (кнопка клавиатуры),
нажмите «Да» для подтверждения и получения ошибки [1]

Почему я не могу удалить или отредактировать строку?

[1]

---------------------------
Microsoft SQL Server Management Studio
---------------------------
No rows were deleted.

A problem occurred attempting to delete row 1.
Error Source: Microsoft.SqlServer.Management.DataTools.
Error Message: The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows).

Correct the errors and attempt to delete the row again or press ESC to cancel the change(s).
---------------------------
OK   Help   
---------------------------

Обновление:
Я думал, что SSMS является XML-антогонистическим, но он одинаков с любыми типами

create table bbb(col1 int);
go
insert into bbb (col1)
values(33)
go 2

1 Ответ

6 голосов
/ 08 декабря 2010

Это ограничение дизайнера / мастера

Поскольку строки идентичны, нет ничего, что сообщало бы серверу sql, какую из этих двух строк удалить, помните, что это программа, а не человек ... (это также причина иметь PK в таблице)

Однако вы можете сделать это из окна запроса

delete top (1)
from aaa
where convert(varchar(max),col1) = '<ccc>ddd</ccc>'

или со старым синтаксисом

set rowcount 1

delete 
from aaa
where convert(varchar(max),col1) = '<ccc>ddd</ccc>'

set rowcount 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...