0
votes

Définir et définir des variables à l'intérieur de la CTE (avec) et utilisez-les dans un autre CTE

Y a-t-il un moyen de définir une variable à l'intérieur d'une expression comme celle-ci? xxx


2 commentaires

En fait, après avoir attribué des valeurs à la variable, pourquoi vous sélectionnez la requête CTE2 . Qu'essayez-vous d'atteindre?


@Darkrob parce que je veux l'utiliser dans un autre CTE


5 Réponses :


2
votes

Votre code ressemble à T-SQL.

Dans T-SQL, vous ne pouvez pas retourner un ensemble de résultats et définir une valeur de variables dans la même instruction SELECT, CTE ou non. P>

Le code suivant n'est pas valide dans T-SQL: strong> p> xxx pré>

et il serait toujours invalide si l'instruction SELECT CODE> était une partie d'une expression de table commune. P> En outre, une expression de table commune doit contenir une instruction SELECT qui renvoie un ensemble de résultats - afin que vous ne puissiez pas faire quelque chose comme ceci: P>

with cte as
(
    select @var1 = someColumn
    from someTable
)


4 commentaires

Merci mais ma question est quelque chose d'autre.


quelque chose d'autre de quelle manière?


Les variables définies seront utilisées dans un autre CTE


La définition d'une variable dans T-SQL est effectuée avec le mot-clé déclarer , pas lors de la définition de sa valeur.



0
votes

Vous ne pouvez pas Sélectionner et définir dans une seule instruction.

Pour votre requête, vous devez le faire en 2 parties seulement. D'abord pour définir votre valeur variable. Deuxième requête pour obtenir l'enregistrement de résultat dans le format de tableau. xxx

Bien qu'il ne soit pas nécessaire de définir votre valeur de variable au milieu de votre requête.

Vous obtenez les valeurs de variable ou obtenez les données dans Sélectionner une instruction.


0 commentaires

0
votes

Non, vous ne pouvez pas. Le DOCS pour le avec commun_table_expression dit: xxx

et la cte_query_definition est (met l'accent sur la mine):

Spécifie une instruction SELECT dont le jeu de résultats remplit le commun expression de table. l'instruction SELECT pour cte_query_definition doit répondre aux mêmes exigences que pour créer une vue , sauf un CTE ne peut pas Définir un autre CTE. Pour plus d'informations, voir la section Remarques et Créer une vue (transact-sql).

Dans une vue Vous ne pouvez pas définir de variables, vous ne pourrez donc pas les définir dans un CTE également.


2 commentaires

Ce n'est pas entièrement précis - vous pouvez utiliser des variables dans une table commune, vous ne pouvez tout simplement pas définir leurs valeurs.


Correct, je voulais dire les définir.



0
votes

Il n'y a aucun moyen de définir une variable dans un CTE

Si vous spécifiez vos exigences, nous pourrions trouver une meilleure solution

Cependant, ma suggestion n'est pas d'utiliser CTE mais d'aller avec la table TEMP et de travailler à partir de il xxx


0 commentaires

0
votes

La documentation officielle de CTE est sur Microsoft SQL DOCS

WITH [CTE2] AS
(
   SELECT dbo.yourFunction1(t.column_i) as var1
   , dbo.yourFunction2(t.column_j) as var2
   FROM dbo.[CTE] t
   WHERE yourFunctionX(t.column_p) = 100
     AND t.column_q IS NOT NULL 
);

declare @var1 varchar(500), @var2 varchar(500);
Select @var1 = t2.var1, @var2 = t2.var2 from [CTE2] t2;


0 commentaires