-1
votes

Query dynamique pour trouver la longueur des lignes dans une colonne de SQL Server

J'ai besoin de préparer une requête dynamique pour trouver la longueur de toutes les lignes d'une colonne de SQL Server. Disons qu'il y a 10 colonnes pour une table avec 100 rangées. J'ai besoin de trouver la longueur de la ligne pour chaque colonne de manière dynamique.


10 commentaires

Utilisez-vous MS SQL Server ou PostgreSQL?


Exemples de données? résultat attendu?


@Usmanmirza Résultat devrait donner la somme de la longueur des rangées pour chaque colonne


@jarlh en fait, il devrait fonctionner pour les deux, la migration de SQL Server sur PostgreSQL, il devrait générer un même résultat dans les deux


@sumy, vous souhaitez donc un résultat d'une seule rangée avec une colonne séparée contenant une longueur totale de la valeur de colonne? Est-ce juste pour les colonnes de chaîne? Qu'en est-il des autres types de données? La même requête ne fonctionnera pas pour les deux produits DBMS.


@sum y, vous voulez donc une ligne totale à la fin du résultat qui ont une somme de la longueur de chaque colonne à droite?


@Danguzman en fait, j'ai besoin d'une requête pour la validation de données I.e Les données totales doivent être migrées à partir de SQL Server vers Postgres, afin de vérifier les données que je souhaite cette requête, oui il existe d'autres types de données.


@Usmanmirza Oui S'il y a 10 colonnes, le résultat doit avoir 10 noms de colonne ainsi que la longueur des lignes dans chaque colonne.


@sumy. . . Veuillez expliquer ce que cela est censé vouloir dire: "Je dois trouver la longueur de la ligne pour chaque colonne de manière dynamique." La déclaration n'a aucun sens pour moi. Les colonnes n'ont pas de "longueurs de ligne".


@Gordonlinoff somme de la longueur de toutes les lignes de cette colonne - Résultat doit avoir la table_name, Nom de colonne et la somme ci-dessus


3 Réponses :


0
votes

En supposant que vos colonnes toutes les colonnes sont des colonnes de chaîne, bien que la fonction len code> fonctionne de toute façon.

-- replace 'mytable' with the actual table name
declare @tableName nvarchar(128) = 'mytable';
declare @queryToRun nvarchar(max) = '';

-- IMPORTANT: following query is putting each column name as len_columnName
select  @queryToRun = @queryToRun + ', len([' + c.name + ']) as [len_' + c.name + ']
'
from    sys.tables as t
        inner join sys.columns as c on t.object_id = c.object_id
where   t.name = @tableName

-- removing the first comma
set @queryToRun = SUBSTRING(@queryToRun, 2, len(@queryToRun) - 1);

-- creating the query with dynamic column names
set @queryToRun = 'select ' + @queryToRun + ' from ' + @tableName;

--print @queryToRun

exec (@queryToRun)



0
votes

Vous pouvez utiliser sys.tables et sys.all_columns xxx


2 commentaires

Conseil: la meilleure pratique lors de l'assemblage des noms d'objet dans des instructions SQL dynamiques consiste à utiliser QUANNAME () Pour éviter les problèmes avec des noms impairs, par exemple Nouveau tableau avec un espace ou des mots réservés tels que de .


Merci pour votre conseil pratique, c'est très utile dans ma langue



0
votes

Essayez ce script, vous obtiendrez une longueur de données de chaque colonne dans le tableau de manière dynamique xxx


0 commentaires