Nie widziałem podobnych pytań na ten temat i musiałem to zbadać pod kątem czegoś, nad czym teraz pracuję. Pomyślałem, że opublikuję odpowiedź na to pytanie, gdyby ktoś inny miał to samo pytanie.
sql
sql-server
line-breaks
Mark Struziński
źródło
źródło
Odpowiedzi:
char(13)
jestCR
. W przypadku łamania linii w stylu DOS / WindowsCRLF
chceszchar(13)+char(10)
:źródło
+
, SQL Server zacznie narzekać, że twoje zapytanie jest zbyt głęboko zagnieżdżone. Moim rozwiązaniem było zamiast tego użyć odpowiedzi Roba Coopera, ale ze znacznie dłuższym i bardziej niejasnym tokenem.Znalazłem odpowiedź tutaj: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in- kod/
Po prostu konkatenujesz ciąg i wstawiasz miejsce, w
CHAR(13)
którym chcesz łamać linię.Przykład:
Spowoduje to wydrukowanie następujących elementów:
źródło
NCHAR(0x1234)
aby uzyskać znak Unicode. Nie jest konieczne wstawianie podziałów linii, ale może się przydać, jeśli trzeba wstawić / wyszukać znaki Unicode.print
zamiastselect
, takich jak:DECLARE @text NVARCHAR(100); SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'; print @text;
Innym sposobem na to jest:
Oznacza to, że po prostu wstawienie podziału wiersza w zapytaniu podczas pisania spowoduje dodanie podobnego podziału do bazy danych. Działa to w SQL Server Management studio i Query Analyzer. Wierzę, że to zadziała również w języku C #, jeśli użyjesz znaku @ na ciągach.
źródło
Uruchom to w SSMS, pokazuje, jak podziały wiersza w samym SQL stają się częścią wartości ciągu obejmujących linie:
Wynik:
Linia 1
Linia 2
Linia 3
Jak długi jest pusty wiersz?
2)
Jakie są wartości ASCII?
13
10
Lub jeśli wolisz podać swój ciąg w jednym wierszu (prawie!), Możesz użyć
REPLACE()
takiego (opcjonalnie użyćCHAR(13)+CHAR(10)
jako zamiennika):źródło
Po Google ...
Pobieranie kodu ze strony internetowej:
Wygląda na to, że można to zrobić, zastępując symbol zastępczy znakiem CHAR (13)
Dobre pytanie, nigdy nie zrobiłem tego sam :)
źródło
Dotarłem tutaj, ponieważ martwiłem się, że cr-lfs, które podałem w ciągach C #, nie były pokazywane w odpowiedziach na zapytania SQl Server Management Studio.
Okazuje się, że tam są, ale nie są wyświetlane.
Aby „zobaczyć” cr-lfs, użyj instrukcji print, takiej jak:
źródło
Oto funkcja C #, która wstawia wiersz tekstowy do istniejącego obiektu blob tekstowego, ograniczonego przez CRLF i zwraca wyrażenie T-SQL odpowiednie dla operacji
INSERT
lubUPDATE
operacji. Ma w sobie część naszej zastrzeżonej obsługi błędów, ale kiedy go rozprujesz, może być pomocny - mam nadzieję, że tak.źródło
Powiedziałbym
lub
źródło
To zawsze jest fajne, ponieważ kiedy dostajesz wyeksportowane listy, powiedzmy Oracle, wtedy dostajesz rekordy obejmujące kilka linii, co z kolei może być interesujące dla, powiedzmy, plików cvs, więc uważaj.
W każdym razie odpowiedź Roba jest dobra, ale radzę użyć czegoś innego niż @, spróbuj jeszcze raz, na przykład §§ @@ §§ lub coś takiego, aby miał szansę na wyjątkowość. (Ale pamiętaj o długości pola
varchar
/ donvarchar
którego wstawiasz ...)źródło
Wszystkie te opcje działają w zależności od sytuacji, ale żadna z nich może nie działać, jeśli używasz SSMS (jak wspomniano w niektórych komentarzach SSMS ukrywa CR / LF)
Więc zamiast jeździć po zakręcie, sprawdź to ustawienie
Tools
|
Options
źródło