T-SQL Boucle While et la concaténation
J'ai une requête SQL qui est censé sortir un disque, et concat chacun à une chaîne, alors la sortie de cette chaîne. La partie importante de la requête ci-dessous.
DECLARE @counter int;
SET @counter = 1;
DECLARE @tempID varchar(50);
SET @tempID = '';
DECLARE @tempCat varchar(255);
SET @tempCat = '';
DECLARE @tempCatString varchar(5000);
SET @tempCatString = '';
WHILE @counter <= @tempCount
BEGIN
SET @tempID = (
SELECT [Val]
FROM #vals
WHERE [ID] = @counter);
SET @tempCat = (SELECT [Description] FROM [Categories] WHERE [ID] = @tempID);
print @tempCat;
SET @tempCatString = @tempCatString + '<br/>' + @tempCat;
SET @counter = @counter + 1;
END
Lorsque le script s'exécute, @tempCatString
sorties de nulle alors que @tempCat
toujours sorties correctement. Est-il une raison pour que la concaténation de ne pas travailler à l'intérieur d'une boucle While? Qui semble erroné, car l'incrémentation @counter
fonctionne parfaitement. Donc, il y a une chose que je suis absent?
Vous devez vous connecter pour publier un commentaire.
Semble comme il devrait fonctionner, mais pour somereason il semble penser @tempCatString est null, qui est pourquoi vous êtes toujours obtenir une valeur null comme nullconcatenated à quoi que ce soit d'autre est toujours null. Vous suggère d'essayer avec
COALESCE()
sur chacune des variables à définir et à se "" si ils sont nuls.ce serait plus efficace....
aussi regarder concat_null_yields_null comme une option pour résoudre votre problème de concaténation, mais je voudrais éviter que la route
Je suis d'accord avec keithwarren, mais je voudrais toujours être sûr d'ajouter une clause ORDER BY de la requête. Vous pouvez alors être sûr de savoir quel ordre les valeurs sont concaténés dans.
Aussi, les FUSIONNER pour remplacer la valeur NULL avec " efficacement le rendement des lignes vides. Je ne sais pas si vous les voulez ou pas, mais si pas juste de filtrer dans la clause where à la place...
Enfin, vous semblez avoir une table temporaire, y compris les Identifiants qui vous intéresse. Cette table peut juste être inclus dans une JOINTURE pour filtrer la table source...