Il existe une colonne 'Keys' dans une table. Avec des données Comme ceciGénération de valeurs uniques
Key Name
1 aaa
2 sads
null asd
null asd
Maintenant, je dois remplacer les valeurs nulles par 3 et 4. Comment puis-je faire cela.
Il existe une colonne 'Keys' dans une table. Avec des données Comme ceciGénération de valeurs uniques
Key Name
1 aaa
2 sads
null asd
null asd
Maintenant, je dois remplacer les valeurs nulles par 3 et 4. Comment puis-je faire cela.
Selon la version de SQL Server avec laquelle vous travaillez, vous utiliseriez TOP ou SET ROWCOUNT pour limiter une UPDATE à une seule ligne. Quelque chose comme ça va fonctionner:
select top 1 * from sysobjects
WHILE @@ROWCOUNT > 0
BEGIN
UPDATE TOP 1 Keys SET Key = (SELECT MAX(Key) from Keys)+1 WHERE Key is null
END
Mais ce n'est pas idéal. Je ne peux pas penser à une autre façon d'aborder les lignes en double - à moins qu'il s'agisse d'une tâche ponctuelle, auquel cas l'ajout temporaire d'une colonne IDENTITY fonctionnerait.
Pouvez-vous s'il vous plaît expliquer cela. –
@Nadeem - je ne sais pas quelles parties vous voulez expliquer. Si vous l'avez essayé et que cela n'a pas fonctionné, quel type d'erreur a été produit? Pour d'autres aspects, il serait préférable que vous ajoutiez plus d'informations à votre question. Quelle version de SQL utilisez-vous? Est-ce une tâche ponctuelle, ou allez-vous la gérer régulièrement? Si régulièrement, existe-t-il une raison pour laquelle les valeurs NULL ne peuvent pas être évitées en premier lieu. –
+1 pour "ajouter une colonne d'identité", la bonne réponse et la bonne façon de le faire – smirkingman
Si vous pouvez mettre les données (temporairement) dans une table séparée, vous pouvez utiliser ROW_COUNT():
declare @Keys table ([Key] int not null, [Name] varchar(50) null);
insert into @Keys ([Key], [Name])
select [Key], [Name]
from [Keys]
where [Key] is not null
union all
select [Key] = row_number() over (order by [Name]) +
(select max([Key]) from [Keys]),
[Name]
from [Keys]
where [Key] is null;
truncate table [Keys];
insert into [Keys] select * from @Keys;
Est-ce que toute la structure de la table? Pas de champs d'identité? Et vous voulez dupliquer 'Name's avec différents' Key's? – Oded
à partir de l'exemple fourni, il n'est pas complètement spécifié comment vous souhaitez le faire. Quel est l'ordre dans lequel vous souhaitez affecter 3,4 ...? – Unreason
oui Je souhaite des valeurs de clé différentes pour les mêmes noms. –