Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обрезание / 22 сообщений из 22, страница 1 из 1
09.07.2002, 23:40:51
    #32035881
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
6.5

create table blabla (field varchar(255))
go
isnert blabla select 'qwerty'
go
select field from blabla

получаю значение field, дополненное пробелами до 255 символов

мне надо без пробелов

select rtrim(field) from blabla
не помогает

select rtrim(convert(char(255),field)) from blabla
тоже
А КАК?
P.S: в blabla в field вставляются строки, длина которых заранее не известна и колеблется в пределах от 1 до 255 байт
...
Рейтинг: 0 / 0
10.07.2002, 15:57:24
    #32036041
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
?
...
Рейтинг: 0 / 0
10.07.2002, 16:22:38
    #32036058
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
не знаю как в 6.5 а в 2000
SET ANSI_PADDING ON|OFF
...
Рейтинг: 0 / 0
11.07.2002, 01:14:32
    #32036110
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Не уверен, что правильно понимаю, но думается, что

когда я в клиенте открываю recordset, источником для которого является view на сервере, то сервер выбирает записи посредством view и результат возвращает клиенту. Размер этой выборки напрямую зависит от (длина записи) Х (число записей). Если в поле записи типа varchar(255) строка, например, из 10 байт, то остальные будут пробелами (я не имею ввиду как SQL Server хранит такие поля, я про то как он их возвращает). Эти пробелы меня не интересуют, мне их нужно обрезать до того, как клиент получит результат от сервера. Зачем мне получать лишние 245 байт для каждой записи (это если в поле записывалась строка из 10 символов, но это не факт, может быть 20,30 и т.д, потому varchar(255), а не char(10)), а потом обрезать их в клиенте.
Возможно я заблуждаюсь в своих рассуждениях, поправте меня если это так, а лучше ОТВЕТЬТЕ НА ВОПРОС, пожалуйста.
Или вопрос такой простой, что никто не хочет отвечать?

4 RomНе знаю будет ли рабоать, завтра на работе проверю.
...
Рейтинг: 0 / 0
11.07.2002, 07:41:08
    #32036122
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Попробуем разобраться.
set ansi_padding on|off действует только при создании колонки.
И еще.
The SQL Server ODBC driver and Microsoft OLE DB Provider for SQL Server automatically set ANSI_PADDING to ON when connecting. This can be configured in ODBC data sources, in ODBC connection attributes, or OLE DB connection properties set in the application before connecting. SET ANSI_PADDING defaults to OFF for connections from DB-Library applications.
Все это может сказаться при создании временной таблицы.
Или уже сказалось при создании постоянной таблицы.

Проводим эксперимент.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set ansi_padding on
create table blabla (field1 varchar( 25 ),field2 varchar( 25 )) 
insert blabla select 'qwerty        ','asdfg' 
select field1 +'!', field2 +'!' from blabla
drop table blabla
go

set ansi_padding off
create table blabla (field1 varchar( 25 ),field2 varchar( 25 )) 
insert blabla select 'qwerty        ','asdfg' 
select field1 +'!', field2 +'!' from blabla
drop table blabla
go

-------------------------- --------------------------
qwerty ! asdfg!

-------------------------- --------------------------
qwerty! asdfg!

(При просмотре в броузере, все пробелы из первого ответа, естественно, собрались в один.)

Выходит, самовольно SQL пробелы не добавляет, а только отсекает их при вставке, если ANSI_PADDING OFF. Без завершающих пробелов все вставляется "как есть".

=====================
Рекомендую попробовать пройтись по исходной таблице RTRIM и контролировать, в каком виде записи вставляются в таблицу.
З.Ы.
Если это поможет, то мы с Вами по одним граблям ходили.
...
Рейтинг: 0 / 0
11.07.2002, 11:14:01
    #32036173
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
По-моему, в версии 6.5 есть только один надёжный способ - выводить колонку с полем datalength(field) и обрезать на клиенте.
И, само собой, читать в BOL про "Microsoft OLE DB Provider" для данной версии бессмысленно :-)
...
Рейтинг: 0 / 0
11.07.2002, 18:27:04
    #32036336
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Я утром не совсем проснулся (но зато инет дешев). Конечно, не при добавлении колонки, а при вставке строки.
...
Рейтинг: 0 / 0
13.07.2002, 01:00:53
    #32036566
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
6.5

4 alexeyvg

Вот именно, что не хочется для этого еще одно поле заводить.

4 Cat2

В принципе, мне это подходит, если они обрезаются при вставке, то и выводятся в таком же виде.
Только вот одна проблема, на одном сервере это работает, а на другом нет.

Может еще какие установки на это влияют?
...
Рейтинг: 0 / 0
13.07.2002, 01:44:16
    #32036571
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Не понял.
У Вас есть два сервера, к которым могут подключатся одинаковые клиенты?
Или клиенты разные? Да вроде клиенты тут не причем. А может причем? То, что я вычитал в БОЛ, приведено выше.
В порядке эксперимента, проставьте в начале каждой транзакции на вставку-обновление
set ansi_padding off
Не понимаю, зачем сделано так, что по умолчанию он становиться в ON.
И вообще, мне спать хочется, а Вы так и не ответили RTRIM помогло?
...
Рейтинг: 0 / 0
13.07.2002, 01:51:54
    #32036572
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2

Да нет, просто я ваши скрипты запускал на разных серверах (не из клиентов, а в ЕМ). Так вот на одном работает так как вы говорите, а на другом нет. Вот я и спрашиваю: может быть что-то еще на это влияет?

Аналогичн rtrim на одно работает, на другом нет
...
Рейтинг: 0 / 0
13.07.2002, 02:04:33
    #32036573
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2

>В порядке эксперимента, проставьте в начале каждой транзакции на вставку-обновление
set ansi_padding off

У меня работало только при создании таблицы, а при вставке никак себя не проявляло
...
Рейтинг: 0 / 0
13.07.2002, 02:10:57
    #32036574
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Составители хелпов. БЛИН.
...
Рейтинг: 0 / 0
13.07.2002, 02:29:30
    #32036576
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2

Ну зачем так. Может я прогнал, хотя вроде все верно.
В понедельник на работе с новыми силами попробую.
Хотя какие будут силы, блин, в воскресенье у нас День рыбака..........
...
Рейтинг: 0 / 0
13.07.2002, 02:40:01
    #32036577
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Радует хотя бы то, что мы с Вами помирились
...
Рейтинг: 0 / 0
13.07.2002, 02:42:40
    #32036578
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2

Так, а я вроде и не ссорился
...
Рейтинг: 0 / 0
13.07.2002, 08:49:37
    #32036583
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Значит, мне показалось.
...
Рейтинг: 0 / 0
16.07.2002, 00:10:14
    #32036827
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2
Разобрался, set ansi_padding on|off проявляет себя тоько создании таблицы. Так что зря ты их ругал, по крайней мере за это.
Когда прошелся по таблице rtrim'oм, все поля обрезались не зависимо был ON или OFF при создании таблицы.
Но почему если ON, и данные заносятся в поле так как есть (с завершающими пробелами), и если
select rtrim(field1) from blabla rtrim себя никак не проявляет?
да и еще. А если тот, кто потом будет сопровождать базу решит создать таблицу заново
(не будем выяснять зачем это может понадобиться), откуда ему знать ON был или OFF? Ну, поленится он в документацию заглянуть.

Про set ansi_padding on|off я-то все конечно уяснил, но все равно придется заводить поле для хранения размера строки, которая записывается в поле, потому что эта строка ничто иное как имя файла, а оно, как бы, может заканчиваться пробелами, и обрезание может привести к неточной информации об имени файла.
...
Рейтинг: 0 / 0
16.07.2002, 20:00:00
    #32037032
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Похоже на то, что в Вашем случае действительно надо хранить длину поля в отдельном поле и на клиенте правильно его обрабатывать.
Объясните ламеру, который кроме виндов ничего не видел, а где в имени файла могут быть важные заключительные пробелы?
...
Рейтинг: 0 / 0
16.07.2002, 20:27:56
    #32037038
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2

Это ум за разум зашел, блин.
У на жара 40 градусов в тени.
Так а все таки почему

select rtrim(field1) from blabla rtrim себя никак не проявляет?
...
Рейтинг: 0 / 0
16.07.2002, 21:07:17
    #32037044
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
Фиг его знает. Хотя у меня комфортная температура, 18 градусов в тени, 19 на солнце.

Никогда не задумывался над этим вопросом, но по-моему сервак возвращает поле длиной, которая равна описанной длине значения поля. По крайней мере в Query Analiser это выглядит именно так.
А потом, наверное, уж клиент решает, усекать или нет.
Может в этом направлении копать?
Все вышесказанное является чистым теорействованием.

Бросьте на мое мыло тестовые данные. Попробую в реальной обстановке.
Обстановка - W98, MS SQL7 DE. Фиг его знает, какие у меня патчи, дома я об этом не задумываюсь. Клиент будет Delphi+ADO и ASP.
...
Рейтинг: 0 / 0
17.07.2002, 00:10:06
    #32037057
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
4 Cat2
Да смех здесь тестировать че-то. Я уж по разному пробовал. Не действует оно и все. Да на пример примерах, например (простите за каламбур). Вообще мне это пока не мешает, но так, для общего развития не помешает
...
Рейтинг: 0 / 0
17.07.2002, 00:19:15
    #32037060
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезание
В смысле на ваших примерах
Чего-то у меня язык стал заплетаться
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обрезание / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]