1

Pour clarifier, j'exécute Sybase 12.5.3, mais je suis porté à croire que cela est vrai pour SQL Server 2005 aussi. En fait, je suis en train d'écrire une requête qui ressemble un peu à cela, je l'ai simplifié autant que possible de mettre en évidence le problème:Comment combiner une affectation de variable avec des opérations d'extraction de données dans T-SQL

DECLARE @a int, @b int, @c int 

SELECT 
    @a = huzzah.a 
    ,@b = huzzah.b 
    ,@c = huzzah.c 
FROM (
    SELECT 
     1 a 
     ,2 b 
     ,3 c 
) huzzah 

Cette requête me donne l'erreur suivante: « Erreur: 141 Une instruction SELECT qui affecte une valeur à une variable ne doit pas être combinée avec des opérations de récupération de données. "

Le seul travail que j'ai à faire à ce jour est d'insérer les données de la table dérivée dans une table temporaire, puis de la sélectionner à nouveau. Ce qui fonctionne bien, mais le fait que cela ne fonctionne pas irrite moi. Y a-t-il une meilleure manière de faire cela?

+0

message d'erreur même est lancée par MSSQL !!! – Faiz

Répondre

2

L'erreur n'apparaît comme décrit dans 12.5.3 esd 4 & 7, il fonctionne très bien dans 12.5.4 esd 4 & 6.

On dirait un bug qui a été corrigé, vos seules options semblent être une solution de contournement ou un correctif.

ont trouvé ce qui semble être le bug 377625

1

Je viens d'exécuter votre code contre 12.5.3 et il analyse bien ... ne retourne rien mais il fonctionne. Avez-vous peut-être un peu trop simplifié le problème, car je ne vois aucun message d'erreur.

Juste pour être clair, ce qui suit fonctionne et renvoie ce que vous attendez.

DECLARE @a int, @b int, @c int 

SELECT 
    @a = huzzah.a 
    ,@b = huzzah.b 
    ,@c = huzzah.c 
FROM (
    SELECT 
     1 a 
     ,2 b 
     ,3 c 
) huzzah 

select @a 
select @b 
select @c 
+0

Je viens de jeter un oeil à la version @@ et nous sommes assis à: Adaptive Server Enterprise/12.5.3/EBF 13332 ESD # 7/P/Linux Intel/Enterprise Linux/ASe1253/1951/32 bits/OPT/Ven Mar 24 00:40:52 2006 – ninesided