Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запись текста в файл с нужной кодировке (866)  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
Посоветуйте пожалуйста, как записать текст, который хранится в переменной с типом varchar(max) в файл в кодировке win 866(OEM). Имя файла тоже хранится в переменной varchar(max).
Спасибо.
14 авг 12, 17:16    [13010595]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
визард "экспорт импорт" в настройках указываете кодировку 866
14 авг 12, 17:20    [13010620]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
хотя у Вас есть и еще условия:
-имя файла в переменной
-данные в переменной

тогда, визард не подойдет, в прямую
14 авг 12, 17:24    [13010644]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
nicescar
Member

Откуда:
Сообщений: 94
Ну почему не подойдет, какой-нибудь DTS-пакет вполне себе справится.
14 авг 12, 17:30    [13010675]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
я подозркваю, что это необходимо где-нибудь внутри ХП
14 авг 12, 17:38    [13010724]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
is_me,

bcp
в хелпе можно посмотреть, как указать кодировку.
-C { ACP | OEM | RAW | code_page }
14 авг 12, 17:42    [13010745]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
как вариант использовать bcp с указанием параметра code_page
т.е формировать команду, а потом натравливать xp_cmdshell
14 авг 12, 17:43    [13010748]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
nicescar
Member

Откуда:
Сообщений: 94
HandKot
как вариант использовать bcp с указанием параметра code_page
т.е формировать команду, а потом натравливать xp_cmdshell

На xp_cmdshell нужно еще разрешения выбить.
14 авг 12, 17:44    [13010755]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
написать CLR-процедуру
14 авг 12, 17:47    [13010770]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
9803638
EXEC dbo.spSaveToFile 'Z:\Path\MyFile' ,@Data, 'us-ascii' -- 'CP866'
14 авг 12, 18:29    [13010957]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Mnior
9803638
EXEC dbo.spSaveToFile 'Z:\Path\MyFile' ,@Data, 'us-ascii' -- 'CP866'


неплохой конечно метод, но я бы поостерегся использовать sys.sp_OACreate и иже с ним методы.
Были неприятные инциденты.
В моем случае был правда другой COM-объект и он часто валился, что приводило к утечке памяти
Уж лучше CLR-процедуру наваять
15 авг 12, 08:49    [13012763]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
HandKot
использовать sys.sp_OACreate и иже с ним методы.
Были неприятные инциденты.
В моем случае был правда другой COM-объект и он часто валился, что приводило к утечке памяти
Уж лучше CLR-процедуру наваять

У мну из 15 продакшинов только 2 имеют разрешения на CLR , sp_OA... .
В общем случае не испытываем проблем - экспорт/ импорт и дт выполняется как сервисное ПО. Чисто для "себя" не вижу особых причин использовать CLR, возможно задач не было таких.
15 авг 12, 09:16    [13012845]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HandKot
В моем случае был правда другой COM-объект и он часто валился, что приводило к утечке памяти
Уж лучше CLR-процедуру наваять
У меня было ровно с точностью до наоборот, поэтому я выбросил СLR и поставил OLE, хотя с тех пор много воды утекло и CLR пофиксили.

Не пользуйтесь непроверенным софтом. А ошибки в стороннем приложении не говорит о порочности подхода/интерфейса.
И вообще эпично сравнивать по глючности продукты одной и той же компании (M$).

Ken@t
не вижу особых причин использовать CLR
У меня таже история.
15 авг 12, 12:26    [13014015]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Mnior
А ошибки в стороннем приложении не говорит о порочности подхода/интерфейса.

кстати ошибки были не ком объекта,а самого скуля
было выпущено много фиксов по причине "утечка памяти" для 2005 и раньше
возможно всё таки в 2008 и выше, эту проблему смогли побороть
здесь сложно сказать, nак как мы наоборот отказались от Ole Automation в пользу CLR и особых проблем пока нет

ЗЫЖ кстати в пользу CLR можно отнести, что выгрузка того же текстового файла обойдется всего одной строкой
15 авг 12, 14:10    [13014892]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
Спасибо всем!
Щас работаю через xp_cmdshell, внешним егзэшником переделываю кодировку.
С CLR видимо получше будет...,
Насчет 'sp_OACreate' тоже попробую, это для меня вообще что - то новое.
15 авг 12, 16:16    [13015939]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HandKot
ЗЫЖ кстати в пользу CLR можно отнести, что выгрузка того же текстового файла обойдется всего одной строкой
Поржал. Типа компиляция в студии, подсоединение DLL и т.п. проще чем тупые 20 строк TSQL скрипта.

HandKot, возможно вам банально не повезло с конфигами, серверами и версиями, но скорее с поведением конкретного COM объекта. А то читающим может придти ересь, что проблема создавалась в OLE при любых COM, а не из-за особого взаимодействия с "вашим" COM. Я не наблюдал утечек ни на 2000м ни на 2005м ни на 2008м ни для одного используемого COM.
Утечки наблюдал только с CLR (2005) и Оракакакловским линком.
Так что эти "глюки" сугубо взаимно субъективные.

Ещё преимущество CLR перед OLE это ограничение в 256 единовременно активных объектов.

HandKot, тажело побороть явное преимущество в простоте OLE, нужно организовать хорошую поддержку CLR библиотек и её автоматизацию сборки/компоновки. Т.к. вряд ли кто доверится встраивать чужой бинарик.
1. собрать библиотеку часто встречаемых функций (типа готово, не партесь мужики)
2. написать полностью автономный билд и выставление, без всяких студий и т.п.
3. хорошо пропиарить библиотеку
Лень матушка не даёт сделать оного, тяжёлый вход. Количество элементов всё равно не сравнимо:
1. Тупой скрипт процедуры, уже лежит в скуле, в явном виде, правь на лету ...
2. Отдельно хранить исходники, много лишних телодвижений при выставлении ...

Вот если можно было выставлять процедуры в виде C# кода простым ALTER, тогда да - адназначна CLR.
Скорее появятся inline скалярки.
15 авг 12, 17:17    [13016482]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mnior,

Все плюсы (и реальные, и мнимые) использования OLE перечеркиваются одним громадным минусом -- необходимость членства в sysadmin.
15 авг 12, 17:43    [13016661]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Mnior
Поржал. Типа компиляция в студии, подсоединение DLL и т.п. проще чем тупые 20 строк TSQL скрипта.

говорят, смех продлевает жизнь
а по вопросу - студия сама все делает
кстати, с отладкой намного проще, чем в случае с "черным ящиком"

Mnior
возможно вам банально не повезло с конфигами, серверами и версиями...
Так что эти "глюки" сугубо взаимно субъективные.

действительно, не везло с версиями (фиксами) сервера. Если поискать, то в инете много ссылок на фиксы скуля по поводу утечки памяти при OLE
Вам вероятно везло и работали с уже установленными фиксами или же вы ставили фиксы заранее, не дожидаясь проблем


Mnior
тажело побороть явное преимущество в простоте OLE

в чем она простота?

Mnior
, нужно организовать хорошую поддержку CLR библиотек и её автоматизацию сборки/компоновки. Т.к. вряд ли кто доверится встраивать чужой бинарик.
1. собрать библиотеку часто встречаемых функций (типа готово, не партесь мужики)
2. написать полностью автономный билд и выставление, без всяких студий и т.п.
3. хорошо пропиарить библиотеку

т.е вы легко и не принужденно запускаете скрипт, который Вам дали на стороне?
С OLE надо тодже знать что за COM объект, что за св-ва и методы в нем есть, так что пиар и здесь нужен
в добавок, я говорю в данном вопросе про CLR-написанные собственноручно!!!

Mnior
Лень матушка не даёт сделать оного, тяжёлый вход. Количество элементов всё равно не сравнимо:
1. Тупой скрипт процедуры, уже лежит в скуле, в явном виде, правь на лету ...
2. Отдельно хранить исходники, много лишних телодвижений при выставлении ...

здесь согласен, но без труда не вытащить и рыбку из пруда

Mnior
Вот если можно было выставлять процедуры в виде C# кода простым ALTER, тогда да - адназначна CLR.
Скорее появятся inline скалярки.

пока мечта
15 авг 12, 17:45    [13016672]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
invm
Mnior,

Все плюсы (и реальные, и мнимые) использования OLE перечеркиваются одним громадным минусом -- необходимость членства в sysadmin.


на это он ответит, что пишет ХП с кляузой
Execute AS
15 авг 12, 17:46    [13016686]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
HandKot,

Так execute as не спасет.
15 авг 12, 18:06    [13016859]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
invm
Так execute as не спасет.
Странно, при создании логинов в динамике и доступе к другим БД спасает, а для COM недостаточно? Ну и жесткач
15 авг 12, 19:11    [13017173]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Ennor Tiegael,

При создании процедуры, в предложении execute as можно указать пользователя, но никак не логин.
15 авг 12, 20:03    [13017306]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm, не сейте панику.
invm
Все плюсы (и реальные, и мнимые) использования OLE перечеркиваются одним громадным минусом -- необходимость членства в sysadmin.
Ну дык, для владельца процедуры. Или чтобы выставить CLR типа прав не нужно?
invm
Так execute as не спасет
Вы издеваетесь? Т.е. я тут примеры выкладываю и вы считаете что все запускают их только от sa?
invm
При создании процедуры, в предложении execute as можно указать пользователя, но никак не логин.
Ну и типа юзверь не ассоциируется с логином?
======================================================================================================
HandKot
а по вопросу - студия сама все делает
В том -то и дело, надо открыть студию, которую ещё иметь надо, сконфигурировать. Вы видимо за временем не следите. Вроде мелочь, а у кого-то 3 дня пройдёт, даже у спеца не 3 секунды скрипт запустить. Будте адекватны.
HandKot
кстати, с отладкой намного проще, чем в случае с "черным ящиком"
Какая отладка, какой нафиг чёрный ящик. Разница лишь в том, что код на C#/С++ представлен в TSQL, те же команды. И никакой отладки нафиг не нужно - TSQL скриптовый же язык.

HandKot
действительно, не везло с версиями (фиксами) сервера. Если поискать, то в инете много ссылок на фиксы скуля по поводу утечки памяти при OLE
Лять, ещё больше фиксов про CLR. Оставьте вы принижать чужой опыт и обобщать свой.
HandKot
же вы ставили фиксы заранее, не дожидаясь проблем
Поверьте, никто даже не подозревал у нас о их существовании. А вот с CLR пое..лись многие. Так что не надо ляля, баги везде есть и не надо одеяло тянуть на себя. Я ж не гиперболизирую проблемы CLR и не делаю из этого трагедию. Мало кто в чём ошибся.
И кстати вы говорите о проблема OLE или OLE Automation? На скуле далеко не каждый COM запустится (только с IDispatch), случаи на форме были.
Хотя нет, вру, была одна бага (в ядре скуля) при использовании в TVF на моей личной практике.
Ну тут у меня жёсткая ненависть к M$, что RegExp не встроенные функции TSQL, и ради них CLR или OLE западло включать и нелогично вызывать что-то внешнее.

Похожая тема - линк к Оракаклу. Когда я написал это - никто спорить не стал, вот там да, я больше склоняюсь что проблемы у всех. А закончилось вот так.

Но если вы будете настаивать и приведёте разумные аргументы, то да я скорее поверю опытному бойцу, т.к. не злоупотреблял я этими механизмами.
HandKot
в чем она простота?
Вставил текст (скопированный из браузера sql.ru/forum/...), прошёлся глазками на явную хренотень, нажал Alt+X и всё - уже работает.
Ничего не надо, кроме SSMS (и прав на сервере). Ничего не надо конфигурить особого. Всё (может быть) в скрипте заранее прописано.

HandKot
т.е вы легко и не принужденно запускаете скрипт, который Вам дали на стороне?
Естественно, ибо в этих 10 строках всё как на ладони. Совершенно ничем не хуже чем код на C#. Или код на C# гарантированно априори безопасен?
Надо понимать, что никто больше 10 строк на OLE Automation не напишет - смысл теряется. Банально неудобно городить огород, без подсказок и необходимых языковых конструкций. Нужно всего лишь вызвать пару простых функцию, а не городить целую систему. Аля топорные: SOAЗMethodCall, SaveFile, XMLBulkLoad. И т.п.
Если вы имеете под COM что-то большее, то мы говорим с вами о разных вещах. Вот пжалуста один их примеров: 13012845

HandKot
С OLE надо тодже знать что за COM объект, что за св-ва и методы в нем есть, так что пиар и здесь нужен
в добавок, я говорю в данном вопросе про CLR-написанные собственноручно!
Не надо делать трагедию на 3х строках кода.
Иначе (для сложной кода) нарушается принцип модульности, естественно что он на CLR/C++ и т.п., т.е. полноценная сторонняя библиотека.

Я нисколько не запрещаю CLR, просто не так часто он нужен. Меня наоборот, удивляет что очень мало он представлен на форуме. А если и есть, то чаще не оправдано или какие-то математические/проффессорские задачки.

И ещё, не всякое в OLE Automation возможно или даётся немного геморно.

И ещё. Вот есть оракакловский клиент. Он течёт везде, и на .Net-е жёстко падает (хотя с каждой версией прблем меньше).
Я не представляю, как меня CLR спасёт? Ведь нельзя же в отдельном процессе с отдельной памятью это "добро" запускать.
Даже боюсь что будет падать всё и касаться других сессий или не дай бог всего сервера, хотя скорее всё останется на той же банальной утечки памяти.
16 авг 12, 17:44    [13022326]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mnior
invm, не сейте панику.
invm
Все плюсы (и реальные, и мнимые) использования OLE перечеркиваются одним громадным минусом -- необходимость членства в sysadmin.
Ну дык, для владельца процедуры. Или чтобы выставить CLR типа прав не нужно?
invm
Так execute as не спасет
Вы издеваетесь? Т.е. я тут примеры выкладываю и вы считаете что все запускают их только от sa?
invm
При создании процедуры, в предложении execute as можно указать пользователя, но никак не логин.
Ну и типа юзверь не ассоциируется с логином?
Ага, признаю, был немного не прав. Будет такая процедура работать или нет зависит от владельца БД.
16 авг 12, 20:39    [13023103]     Ответить | Цитировать Сообщить модератору
 Re: Запись текста в файл с нужной кодировке (866)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
Будет такая процедура работать или нет зависит от владельца БД.
Тоже аргумент. Но как-то не кошерно давать обращаться к внешним ресурсам не доверенным базам. Т.е. лучше создавать данные процедуры в отделённых/определённых базе(ах) под чётким контролем.
16 авг 12, 21:28    [13023275]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить