powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обрезание
22 сообщений из 22, страница 1 из 1
Обрезание
    #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
Обрезание
    #32036041
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?
...
Рейтинг: 0 / 0
Обрезание
    #32036058
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю как в 6.5 а в 2000
SET ANSI_PADDING ON|OFF
...
Рейтинг: 0 / 0
Обрезание
    #32036110
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, что правильно понимаю, но думается, что

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

4 RomНе знаю будет ли рабоать, завтра на работе проверю.
...
Рейтинг: 0 / 0
Обрезание
    #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
Обрезание
    #32036173
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, в версии 6.5 есть только один надёжный способ - выводить колонку с полем datalength(field) и обрезать на клиенте.
И, само собой, читать в BOL про "Microsoft OLE DB Provider" для данной версии бессмысленно :-)
...
Рейтинг: 0 / 0
Обрезание
    #32036336
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я утром не совсем проснулся (но зато инет дешев). Конечно, не при добавлении колонки, а при вставке строки.
...
Рейтинг: 0 / 0
Обрезание
    #32036566
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6.5

4 alexeyvg

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

4 Cat2

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

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

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

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

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

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

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

Так, а я вроде и не ссорился
...
Рейтинг: 0 / 0
Обрезание
    #32036583
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит, мне показалось.
...
Рейтинг: 0 / 0
Обрезание
    #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
Обрезание
    #32037032
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на то, что в Вашем случае действительно надо хранить длину поля в отдельном поле и на клиенте правильно его обрабатывать.
Объясните ламеру, который кроме виндов ничего не видел, а где в имени файла могут быть важные заключительные пробелы?
...
Рейтинг: 0 / 0
Обрезание
    #32037038
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 Cat2

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

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

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

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


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