Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Консольный клиент - osql или sqlcmd ?  [new]
aleksandrus
Member

Откуда:
Сообщений: 7
Доброго времени суток.
Пишу утилиту для создания БД на выбранном сервере. В качестве сервера может выступать либо MSDE, либо Microsoft SQL Sever 2008. Утилита может быть запущена на любом из компьютеров, должна работать как локально, так и удалённо. Планируется использовать для этой цели вызовы консольного SQL клиента.
Изначально думал об osql из дистрибутива MSDE. Но хелп посоветовал:
Эта функция будет исключена из будущей версии SQL Server. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, которые ее применяют. Вместо этого используйте программу sqlcmd.


Начал разбираться с sqlcmd, но наткнулся на следующую проблему с пустым паролем.
На моём компе стоит:
Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (Intel X86) May 14 2009 16:02:37
Copyright (c) 1988-2008 Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

На сервере (SERVER) есть пользователь (sa) с пустым паролем:
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)

Судя по хелпу:
Если параметр -P указан в конце командной строки без указания пароля, то программа sqlcmd использует значение пароля по умолчанию (NULL).

Коннекчусь со своего компа к серверу при помощи своего sqlcmd:
sqlcmd -S SERVER -U sa -d master -o log.txt -P
параметр -P без пароля в конце не воспринимается, хотя по хелпу должен поидее.
А так:
sqlcmd -S SERVER -U sa -d master -o log.txt -P""
соединяется, но тут же выходит, в консоли - пустая строка, файл лога пустой..
После этого я создал пользователя sapwd, с паролем 1. В результате:
sqlcmd -S SERVER -U sapwd -d master -o log.txt -P 1
соединяется и ждёт команд, как и должен!
Дальше больше, в ходе экспериментов скачал и установил Native SQL Client и SQLCMD от SQL SERVER 2005, в итоге у меня два sqlcmd (версия 2005.90.1399.0 от 2005 сервера, и версия 2007.100.1600.22 - от 2008 сервера), лежат в разных папках, используют разные библиотеки, и, судя по всему, по-разному себя ведут. sqlcmd версии 2005.90.1399.0 нормально коннектится под пользователем с пустым паролем:
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe -S SERVER -U sa -d master -o log.txt -P""

Собственно, хотелось бы услышать мнение профессионалов.
osql устарел и не рекомендуется к использованию, но на первый взгляд нормально работает со всеми серверами, может распространяться просто в виде исполняемого файла.
sqlcmd - требует обязательной инсталляции Native SQL Client, к тому же при уже установленном Microsoft SQL Server 2008 возможны путаница с версиями sqlcmd и потенциальные проблемы при коннекте под пользователем с пустым паролем.
Какой консольный клиент больше подходит под описанную выше задачу?
24 ноя 09, 14:35    [7970809]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
Пустой пароль sa? Ну-ну.
24 ноя 09, 14:43    [7970880]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
aleksandrus
Member

Откуда:
Сообщений: 7
Гавриленко Сергей Алексеевич
Пустой пароль sa? Ну-ну.

Суровая правда жизни. MSDE позволял задать пустой пароль, вот его и задавали.
24 ноя 09, 16:56    [7972237]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleksandrus
Гавриленко Сергей Алексеевич
Пустой пароль sa? Ну-ну.

Суровая правда жизни. MSDE позволял задать пустой пароль, вот его и задавали.

Это непатченный MSDE. Который подвержен Slammer-у
А патченный хочет пароль при установке
24 ноя 09, 17:00    [7972281]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
aleksandrus
Гавриленко Сергей Алексеевич
Пустой пароль sa? Ну-ну.

Суровая правда жизни. MSDE позволял задать пустой пароль, вот его и задавали.
Так-так, адресочек не подскажите?
24 ноя 09, 17:20    [7972443]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
AlexKubrak
Member

Откуда:
Сообщений: 34
Отказались от osql после того как выяснилось что он неккоректно работает с русскими символами в UNICODE-скрипте.
24 ноя 09, 19:22    [7973097]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
aleksandrus
Member

Откуда:
Сообщений: 7
alexeyvg
Так-так, адресочек не подскажите?

Да мне не жалко. 192.168.3.45.
Народ, ну что вы накинулись на этот пустой пароль. Вы же не знаете всей специфики. На объектах используются локальные сети без доступа в интернет, все компы находятся в одном здании. MSDE используется практически с момента своего появления, я в те времена ещё студентом был и никакого отношения не имею к тому, что на объекты отсылали setup.ini файл для "безгеморной" установки SQL-сервера. Обновлять или настраивать MSDE везде, где он уже стоит - неприемлемо.

Я ведь спрашивал совсем не об этом, а о консольных клиентах. Я могу, конечно, определять версию сервера и использовать для каждой из них свой подход. Наверное, могу подавать запросы напрямую из своей утилиты. Но мне самому стало интересно и хочется разобраться: чем плох osql, почему поведение sqlcmd 2008 сервера отличается от описанного в документации, какую версию консольного клиента лучше использовать и как его правильнее распространять.
AlexKubrak
Отказались от osql после того как выяснилось что он некорректно работает с русскими символами в UNICODE-скрипте.

Отказались в пользу sqlcmd ? Какой версии, и как она поставляется, если не секрет? Смущает необходимость производить две инсталляции на компьютере, на котором, возможно, Native SQL Client и sqlcmd понадобятся только для единовременного запуска моей утилиты. К тому же, как это обычно бывает с мелкомягкими, не до конца понятна юридическая сторона такой установки.
25 ноя 09, 11:03    [7974857]     Ответить | Цитировать Сообщить модератору
 Re: Консольный клиент - osql или sqlcmd ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleksandrus
Я могу, конечно, определять версию сервера и использовать для каждой из них свой подход.

Именно так и делать. Или писать свою типа "универсальную" утилиту. Которая потом все равно устареет.
25 ноя 09, 11:07    [7974892]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить