2017-10-02 6 views
0

Je crée une table comme:Pourquoi le @@ ERROR est toujours 0 et @@ ROWCOUNT toujours 1?

enter image description here

j'exécuter cette instruction:

update test 
set tname = 'Joker' 
where tid % 2 = 0 

il montre:

enter image description here

qui signifie « il y a deux lignes affectées ' en chinois.

Mais si l'exécution print @@rowcount immédiatement, le résultat est:

enter image description here

Que, si l'exécution insert into test values('Paul','foo'), le résultat est:

enter image description here

qui signifie:

Moi ssage 8101, niveau 16, état 1, ligne 21.
Seulement lorsque la liste de colonnes est utilisée et que IDENTITY_INSERT est activé, vous pouvez définir explicitement des valeurs dans la colonne d'identité du tableau 'test'.

Mais si puis exécutez print @@ERROR, il montre:

enter image description here

que je pense devrait être 8101.

Quelqu'un pourrait-il me dire pourquoi? Merci

+1

Toujours publier des données d'échantillon sous forme de tableau au lieu de les afficher en tant qu'image. Il sera utile à des fins de démonstration ou de test –

+0

La raison pour laquelle les images sont déconseillées est répertoriée ici: https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when -asking-a-question – TheGameiswar

Répondre

1

Pour la deuxième question (il aurait été une bonne idée de les publier comme 2 questions distinctes), votre instruction SQL essaie d'insérer «Paul» dans la colonne tid. Vous devez séparer les valeurs comme ceci:

INSERT INTO test VALUES ('Paul'), ('foo') 

Mieux encore, être explicite avec les noms de colonnes:

INSERT INTO test (tname) VALUES ('Paul'), ('foo') 
+0

L'OP ne demande pas pourquoi il reçoit une erreur, mais pourquoi @@ erreur ne montre pas le nombre correct – CodingYoshi

+0

Oh, vous avez raison.Eh bien, j'espère que sa prochaine question allait être de savoir comment résoudre la requête ... – PhillipXT

3

Le premier numéro est pas réplicable, j'ai préparé script démo

create table test(tid int identity(1,1), tname varchar(100)) 
insert into test values ('James'),('Jake'),('Tom'),('Mary') 

update test 
set tname = 'Joker' 
where tid % 2 = 0 

select @@ROWCOUNT --returns 2 

Le deuxième problème est dû au fait que vous exécutez l'instruction select @error séparément. C'est pourquoi vous obtenez 0. Si vous exécutez les deux dernières instructions ensemble, vous obtiendrez 545 comme résultat

set identity_insert test on 
insert into test values ('James'),('Jake'),('Tom'),('Mary') 
select @@ERROR --returns 545