6
votes

Afficher tout Texte de colonne Ntext dans SQL Server Management Studio pour la base de données SQL CE

Je veux souvent faire un "Vérification rapide" de la valeur d'une grande colonne de texte dans SQL Server Management Studio (SSMS). Le nombre maximal de caractères que SSMS vous permettra de voir, en mode Résultats de la grille, est 65535. (Il est encore moins en mode de résultats de texte.) Parfois, j'ai besoin de voir quelque chose au-delà de cette gamme. Utilisation de bases de données SQL Server 2005, j'ai souvent utilisé l'astuce de la convertir en XML, car SSMS vous permet d'afficher des quantités beaucoup plus importantes de texte de cette façon: xxx

mais maintenant j'utilise SQL CE, et Il n'y a pas de type de données XML. Il y a toujours une valeur «caractères maximum de caractères XML» sous des options; Je suppose que cela est utile lors de la connexion à d'autres sources de données.

Je sais que je peux simplement obtenir la valeur totale en exécutant une petite application de console ou quelque chose, mais y a-t-il un moyen de voir la colonne de la Ntext entière Valeur?

[EDIT] OK, cela n'a pas beaucoup d'attention la première fois ( 18 vues ?! ). Ce n'est pas une préoccupation énorme, mais peut-être que je suis juste obsédé par cela. Là a Être un bon moyen de cela, n'est-ce pas là? Donc, une prime modeste est active. Ce que je suis prêt à accepter comme des réponses, dans l'ordre de Best-to-pire:

  1. Une solution qui fonctionne aussi facilement que le truc XML dans SQL CE. C'est-à-dire une seule fonction (convertir, couler, etc.) qui fait le travail.
  2. Un moyen non trop invasif pour pirater SSMS pour l'obtenir pour afficher davantage de texte dans les résultats.
  3. une requête SQL équivalente (peut-être quelque chose qui utilise de manière créative substrant et génère plusieurs colonnes ad-hoc ??) pour voir les résultats.

    La solution doit fonctionner avec des colonnes NVARCHAR et NTEXT de n'importe quelle longueur dans SQL CE de SSMS. Des idées?


1 commentaires

cette convertie en XML est une bonne truc.


4 Réponses :


0
votes

par ce http://msdn.microsoft.com/en-us /Library/ms171931.aspx Vous n'avez pas de chance en utilisant le type XML dans SQL CE. Cela n'existe tout simplement pas. Vous obtenez toujours un champ BLOB NText de 2 Go, mais ce n'est pas d'aide.

Sélectionnez ... comme XML fonctionne dans une requête CE, mais on dirait que la grille le tronque toujours comme Ntext. Pour tester Créer une table Nommé Test avec Char comme NvarchaRar (4000) et Texte comme champs Ntext. Utilisez les affirmations suivantes pour remplir les données et renvoyez-la:

Sélectionnez CHAR, Texte de Test sous forme XML

Insert dans les valeurs de test (TRAN, TEXT) (Répliquer ('A', 4000), répliquez ('B', 4000) + Repliquer ('B', 4000))

Je reçois les deux champs tronquant à peu près au même endroit du mode de grille qui le suggérerait de tronquer moins de 65535. Supprimer le comme XML n'a aucun effet pour que cela ne soit pas réellement allé à XML données quand même.

Vos réponses:

  1. Vous n'êtes pas autorisé à couler mais convertir est valide. Problème: Aucun type XML dans le moteur. Solution longue possible: ferme les données dans une base de données SQL Express ou autrement obtiendrez le type approprié. Pas un petit exploit à moins que vous ne puissiez pas gérer les frais généraux.
  2. SSMS devient extensible mais je dirais que c'est un non-démarreur. C'est une application .NET et peut être visualisée dans le réflecteur mais cela ne suggère pas grand chose.
  3. Alors que la pire option, il semble que le plus facile d'un point de vue SSMS, malheureusement. Vous devez toujours avoir à redimensionner automatiquement chaque colonne, mais j'espère que vous ne le briseriez pas dans plus de 2-3.

    À la fin de la journée, cependant, je ne peux pas m'empêcher de penser que tout cela serait toujours une perte de temps. Vous pourriez peut-être trouver un meilleur outil SQL CE que vous pouvez modifier le schéma et toutes les colonnes de manière appropriée. C'est un peu triste que cela vienne même, mais je ne vois pas une option plus facile.


0 commentaires

1
votes

Cela peut ne pas être idéal, mais pouvez-vous le casser en le visualisant en mode texte?

Par exemple: P>

;WITH my_cte AS
(
    SELECT
        SUBSTRING(my_text, 1, 8000) AS sub,
        SUBSTRING(my_text, 8001, LEN(CAST(my_text AS VARCHAR(MAX)))) AS remainder
    FROM
        dbo.Test_Text
    UNION ALL
    SELECT
        SUBSTRING(remainder, 1, 8000),
        SUBSTRING(remainder, 8001, LEN(remainder))
    FROM
        my_cte
    WHERE
        LEN(remainder) > 0
)
SELECT
    *
FROM
    my_cte


1 commentaires

Malheureusement, les CTE ne sont pas pris en charge en CE. La sous-chaîne portait sur le mieux que j'ai pu venir avec. Pour la majorité des cas, c'est suffisant. Cette question est plus un défi académique à ce stade ...



3
votes

Si vous travaillez avec CE 3.5 Prise en charge du haut et des applications extérieures Essayez cette affirmation:

SELECT texts.id, SUBSTRING(texts.text_column, number*100+1, 100)
FROM 
    (SELECT texts.id, texts.text_column, (99+LEN(texts.text_column))/100 AS l 
     FROM texts) AS texts
OUTER APPLY 
    (SELECT TOP(l) number 
     FROM master.dbo.spt_values val 
     WHERE name IS NULL 
     ORDER BY number) n


2 commentaires

Idée soignée. Je n'étais pas familiarisé avec la fonction d'application extérieure. Malheureusement, la déclaration ne fonctionne pas dans CE, probablement parce qu'il n'y a pas d'équivalent à une base de données principale. Mais je vois ce qui se passe; Peut-être qu'il y a une autre façon d'obtenir le numéro d'énumération.


Je pense que cela a la plus promesse des réponses, alors je le marquez comme la réponse. Il y a un peu plus de temps jusqu'à ce que la prime expire, mais je pars pour des vacances ... :)



0
votes

Je fais comme ceci (démarrez le code sous le mode de débogage) et après avoir exécuté l'instruction SET, vous pouvez simplement copier le texte grand de la fenêtre de débogage dans lequel vous voyez la valeur @X, cliquez sur le visualiseur de la loupe / texte: < Pré> xxx


1 commentaires

Cela a le même problème que l'impression de SQL a une limite de chargement de 8K.