Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 "исчезающий" backslash  [new]
cvasil
Member

Откуда:
Сообщений: 519
Забавный прикол обнаружился сегодня.
Комбинация бэкслэша и возврата каретки понимается сервером как пустая строка.

select '\
', len('\
'), datalength('\
')
go
---- ----------- ----------- 
     0           0


select 'foo\
bar'

------ 
foobar

Баг или фича?
8 янв 05, 01:24    [1230857]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Это наверно идет от 'С' там эта комбинация предусмотрена для продолжения текста на другую строку
8 янв 05, 08:42    [1230924]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Alex Antonoff
Member

Откуда: Из лесу вестимо
Сообщений: 1251
Вообще то там \n - новая строка. В сикуле такое не работает.
8 янв 05, 08:46    [1230925]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Я не сказал "для перевода на новую строку" а "для продолжения... "
8 янв 05, 08:58    [1230931]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
cvasil
Забавный прикол обнаружился сегодня.
Комбинация бэкслэша и возврата каретки понимается сервером как пустая строка.

select '\
', len('\
'), datalength('\
')
go
---- ----------- ----------- 
     0           0


select 'foo\
bar'

------ 
foobar

Это такое продолжение строки в POSIX

Баг или фича?
8 янв 05, 10:41    [1230990]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Сорри вбил ответ в цитату. В общем для C и UNIX такое поведение фича из фич. Видимо и Microsoft решил не отставать. Склейка строк это.
8 янв 05, 10:42    [1230992]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Alex Antonoff
Member

Откуда: Из лесу вестимо
Сообщений: 1251
В сикуле строка и так может продолжаться с новой строки. В том же VB бекслеш означает, что команда продолжается на следующей строке, но это не означает, что можно оставлять не закрытыми кавычки. А тут вообще странный случай ...
8 янв 05, 11:03    [1231019]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Это не продолжение С НОВОЙ строки, а продолжение СТРОКИ
Экранирование возврата каретки
8 янв 05, 12:15    [1231088]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
Taffy
Member

Откуда:
Сообщений: 20501
set nocount on

declare @d varchar(10),@d1 varchar(10)

select @d = '1\
2' ,
	@d1 = '1\' + CHAR(13)+ CHAR(10)+'2' 

select @d, len(@d), datalength(@d),ascii(substring(@d,1,1)),ascii(substring(@d,2,1)),ascii(substring(@d,3,1)),ascii(substring(@d,4,1))
select @d1, len(@d1), datalength(@d1),ascii(substring(@d1,1,1)),ascii(substring(@d1,2,1)),ascii(substring(@d1,3,1)),ascii(substring(@d1,4,1))
,ascii(substring(@d1,5,1))

go
---------- ----------- ----------- ----------- ----------- ----------- ----------- 
12         2           2           49          50          NULL        NULL

                                                                                               
---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
1\
2      5           5           49          92          13          10          50

Я тоже не понимаю почему
8 янв 05, 12:38    [1231100]     Ответить | Цитировать Сообщить модератору
 Re: "исчезающий" backslash  [new]
cvasil
Member

Откуда:
Сообщений: 519
Похоже это все-таки фича, хоть и не документированая в BOL:
http://support.microsoft.com/default.aspx?scid=kb;en-us;164291

Для сравнения, в мануале по Transact-SQL для Sybase эта особенность синтаксиса описана явно: http://sybooks.sybase.com/onlinebooks/group-as/asg1251e/sqlug/@Generic__BookTextView/26016

...
To enter a character string that is longer than the width of your screen,
enter a backslash (\) before going to the next line.
...
10 янв 05, 22:33    [1233990]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить