2010-12-08 3 views
2

Dans SSMS 2008 R2 J'exécution:Pourquoi ne puis-je pas supprimer (modifier) ​​une ligne avec une valeur xml dans SSMS?

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

Ensuite, table ouverte dans SSMS (un clic droit de la table dans l'Explorateur d'objets) avec l'option « Modifier les 200 lignes », sélectionnez une ligne, appuyez sur supprimer (touche du clavier),
cliquez sur "Oui" pour confirmer et recevoir l'erreur [1]

Pourquoi ne puis-je pas supprimer ou modifier une ligne?

[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 
--------------------------- 

Mise à jour:
Je pensais que SSMS est XML antogonistic, mais il est la même chose avec tous les types

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

Répondre

6

Ceci est une limitation du concepteur/assistant

Puisque les lignes sont identiques, il n'y a rien qui indique à SQL Server lequel de ces 2 lignes supprimer, rappelez-vous que c'est un programme pas un humain ... (c'est aussi une raison d'avoir une PK sur une table)

Vous pouvez cependant le faire à partir d'une fenêtre de requête

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

ou avec une syntaxe plus

set rowcount 1 

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

set rowcount 0 
+1

+1 Wow, merci, c'est ce que pour Les spécialistes de SQL Server reçoivent de l'argent en empêchant les autres de faire faillite! –

+2

@ vgv8, je suis sûr que @SQLMenace est payé pour faire des choses beaucoup plus compliquées que cela. – HLGEM

+0

@HLGEM, merci pour votre information. Vraiment j'étais intéressé à connaître l'attitude à ce sujet mais pas la solution simple (plutôt basique). Cela semble n'avoir surpris personne comme quelque chose d'anormal, mais même d'expliquer threoriquement pourquoi il en est ainsi. Ce n'est pas vrai que SSMS ne peut pas distinguer les lignes, les lignes sont différentes, celle qui est sélectionnée et l'autre (s) qui n'est pas ... –

Questions connexes