Question Comment insérer un saut de ligne dans une chaîne SQL Server VARCHAR / NVARCHAR


Je n'ai pas vu de questions similaires posées sur ce sujet et j'ai dû faire des recherches sur quelque chose sur lequel je travaille actuellement. Je pensais que je posterais la réponse pour le cas où quelqu'un d'autre avait la même question.


431
2017-08-27 19:53


origine


Réponses:


char(13) est CR. Pour le style DOS- / Windows CRLF des sauts de ligne, vous voulez char(13)+char(10), comme:

'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.'

464
2017-08-27 20:25



J'ai trouvé la réponse ici: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in-code/

Vous venez de concaténer la chaîne et insérez un CHAR(13) où vous voulez que votre saut de ligne.

Exemple:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
SELECT @text

Cela imprime les éléments suivants:

C'est la ligne 1.
  C'est la ligne 2.


231
2017-08-27 19:55



Une autre façon de le faire est la suivante:

INSERT CRLF SELECT 'fox 
jumped'

En d'autres termes, insérer simplement un saut de ligne dans votre requête tout en l'écrivant ajoutera la même interruption à la base de données. Cela fonctionne dans SQL Server Management Studio et Query Analyzer. Je crois que cela fonctionnera également en C # si vous utilisez le signe @ sur les chaînes.

string str = @"INSERT CRLF SELECT 'fox 
    jumped'"

66
2018-02-14 15:30



Après un Google...

Prendre le code sur le site:

CREATE TABLE CRLF
    (
        col1 VARCHAR(1000)
    )

INSERT CRLF SELECT 'The quick brown@'
INSERT CRLF SELECT 'fox @jumped'
INSERT CRLF SELECT '@over the '
INSERT CRLF SELECT 'log@'

SELECT col1 FROM CRLF

Returns:

col1
-----------------
The quick brown@
fox @jumped
@over the
log@

(4 row(s) affected)


UPDATE CRLF
SET col1 = REPLACE(col1, '@', CHAR(13))

On dirait que cela peut être fait en remplaçant un espace réservé avec CHAR (13)

Bonne question, jamais fait moi-même :)


13
2017-08-27 19:56



Exécutez ceci dans SSMS, il montre comment les sauts de ligne dans le SQL lui-même deviennent une partie des valeurs de chaîne qui couvrent les lignes:

PRINT 'Line 1
Line 2
Line 3'
PRINT ''

PRINT 'How long is a blank line feed?'
PRINT LEN('
')
PRINT ''

PRINT 'What are the ASCII values?'
PRINT ASCII(SUBSTRING('
',1,1))
PRINT ASCII(SUBSTRING('
',2,1))

Résultat :
Ligne 1
Ligne 2
Ligne 3

Quelle est la longueur d'un flux de ligne vide?
2

Quelles sont les valeurs ASCII?
13
dix

Ou si vous préférez spécifier votre chaîne sur une ligne (presque!), Vous pouvez employer REPLACE() comme ça (éventuellement utiliser CHAR(13)+CHAR(10) comme remplacement):

PRINT REPLACE('Line 1`Line 2`Line 3','`','
')

13
2017-09-17 15:13



Je suis arrivé ici parce que je craignais que les cr-lfs que j'ai spécifiées dans les chaînes C # ne soient pas affichées dans les réponses aux requêtes de SQl Server Management Studio.

Il s'avère, ils sont là, mais ne sont pas affichés.

Pour "voir" le cr-lfs, utilisez l'instruction d'impression comme:

declare @tmp varchar(500)    
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp

11
2017-11-26 16:40



Voici une fonction C # qui ajoute une ligne de texte à un blob de texte existant, délimité par des CRLF, et renvoie une expression T-SQL appropriée pour INSERT ou UPDATE opérations. Il contient une partie de notre gestion des erreurs propriétaire, mais une fois que vous avez extrait cela, cela peut être utile - je l’espère.


    /// <summary>
    /// Generate a SQL string value expression suitable for INSERT/UPDATE operations that prepends
    /// the specified line to an existing block of text, assumed to have \r\n delimiters, and
    /// truncate at a maximum length.
    /// </summary>
    /// <param name="sNewLine">Single text line to be prepended to existing text</param>
    /// <param name="sOrigLines">Current text value; assumed to be CRLF-delimited</param>
    /// <param name="iMaxLen">Integer field length</param>
    /// <returns>String: SQL string expression suitable for INSERT/UPDATE operations.  Empty on error.</returns>
    private string PrependCommentLine(string sNewLine, String sOrigLines, int iMaxLen)
    {
        String fn = MethodBase.GetCurrentMethod().Name;

        try
        {
            String [] line_array = sOrigLines.Split("\r\n".ToCharArray());
            List<string> orig_lines = new List<string>();
            foreach(String orig_line in line_array) 
            { 
                if (!String.IsNullOrEmpty(orig_line))  
                {  
                    orig_lines.Add(orig_line);    
                }
            } // end foreach(original line)

            String final_comments = "'" + sNewLine + "' + CHAR(13) + CHAR(10) ";
            int cum_length = sNewLine.Length + 2;
            foreach(String orig_line in orig_lines)
            {
                String curline = orig_line;
                if (cum_length >= iMaxLen) break;                // stop appending if we're already over
                if ((cum_length+orig_line.Length+2)>=iMaxLen)    // If this one will push us over, truncate and warn:
                {
                    Util.HandleAppErr(this, fn, "Truncating comments: " + orig_line);
                    curline = orig_line.Substring(0, iMaxLen - (cum_length + 3));
                }
                final_comments += " + '" + curline + "' + CHAR(13) + CHAR(10) \r\n";
                cum_length += orig_line.Length + 2;
            } // end foreach(second pass on original lines)

            return(final_comments);


        } // end main try()
        catch(Exception exc)
        {
            Util.HandleExc(this,fn,exc);
            return("");
        }
    }

3
2018-03-04 19:11



C'est toujours cool, parce que quand vous obtenez des listes exportées de, disons Oracle, alors vous obtenez des enregistrements couvrant plusieurs lignes, ce qui peut être intéressant pour, disons, les fichiers cvs, alors méfiez-vous.

Quoi qu'il en soit, la réponse de Rob est bonne, mais je conseillerais d'utiliser autre chose que @, en essayer un peu plus, comme §§ @@ §§ ou quelque chose, de sorte qu'il aura une chance d'être unique. (Mais encore, rappelez-vous la longueur de la varchar/nvarchar champ que vous insérez dans ..)


2
2017-08-27 20:26