Как подключиться к БД MSSQL?
Модератор: ykolesnikov
Как подключиться к БД MSSQL?
Здравствуйте.
Есть сервер в домене, на котором крутится MSSQL. Как мне подключиться к этому серверу чтобы сделать SELECT из нужной мне таблицы?
PS: Как сделать SELECT я знаю, не понятно как подключиться к другому серверу, указать его имя и базу данных, чтобы потом с ним можно было работать.
Спасибо.
Есть сервер в домене, на котором крутится MSSQL. Как мне подключиться к этому серверу чтобы сделать SELECT из нужной мне таблицы?
PS: Как сделать SELECT я знаю, не понятно как подключиться к другому серверу, указать его имя и базу данных, чтобы потом с ним можно было работать.
Спасибо.
Re: Как подключиться к БД MSSQL?
мне нужно подключение к MSSQL (не MySQL).
Причем не пересатить OTRS на MSSQL а просто сделать выборку нужных мне данных с удаленного MSSQL сервера. Но из OTRS!
Причем не пересатить OTRS на MSSQL а просто сделать выборку нужных мне данных с удаленного MSSQL сервера. Но из OTRS!
-
- OTRS Новобранец
- Сообщения: 148
- Зарегистрирован: 30 апр 2013, 19:08
- Откуда: Украина, Киев.
- Поблагодарили: 1 раз
Re: Как подключиться к БД MSSQL?
мне нужно подключение к MSSQL (не MySQL).
Причем не пересатить OTRS на MSSQL а просто сделать выборку нужных мне данных с удаленного MSSQL сервера. Но из OTRS!
Код: Выделить всё
use DBI;
OTRS 5s, Ubuntu 12.04
-
- OTRS Гуру
- Сообщения: 5192
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 92 раза
- Поблагодарили: 82 раза
Re: Как подключиться к БД MSSQL?
Судя по постановке вопроса, Ваш ответ не сильно поможет )))))mukexa писал(а):мне нужно подключение к MSSQL (не MySQL).
Причем не пересатить OTRS на MSSQL а просто сделать выборку нужных мне данных с удаленного MSSQL сервера. Но из OTRS!Код: Выделить всё
use DBI;
С уважением,
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
-
- OTRS Новобранец
- Сообщения: 108
- Зарегистрирован: 09 авг 2012, 22:57
- Откуда: Санкт-Петербург
- Благодарил (а): 1 раз
- Контактная информация:
Re: Как подключиться к БД MSSQL?
1. Нужен драйвер для ODBC под Linux.
2. в перловом модуле:
my $driver1 = 'ODBC Driver 13 for SQL Server';
my $database = '********';
my $dsn = 'DBI:ODBC:**********';
my $userid = '***';
my $password = '*******';
my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr; # коннекция с БД
my $sth = $dbh->prepare('SELECT ****** FROM table WHERE email = ?'); # запрос
$sth->bind_param( 1, $Address ); # параметр запроса
$sth->execute( $Address ) or die $DBI::errstr;
3. далее по результатам запроса и целям.
2. в перловом модуле:
my $driver1 = 'ODBC Driver 13 for SQL Server';
my $database = '********';
my $dsn = 'DBI:ODBC:**********';
my $userid = '***';
my $password = '*******';
my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr; # коннекция с БД
my $sth = $dbh->prepare('SELECT ****** FROM table WHERE email = ?'); # запрос
$sth->bind_param( 1, $Address ); # параметр запроса
$sth->execute( $Address ) or die $DBI::errstr;
3. далее по результатам запроса и целям.
OTRS 3.3.8, Debian 7, PostgreSQL 9.1.13
OTRS 4.0.17, Debian 8, MySQL + MSSQL
OTRS 4.0.17, Debian 8, MySQL + MSSQL
Re: Как подключиться к БД MSSQL?
вооооооотт...
в развитие темы добавлю - у меня получилось подключиться к мсскл.
И даже вызвать хранимую процедуру с параметрами. Всё отрабатывает как надо.
Но есть проблема: я не могу из хранимой процедуры получить один ВЫходной параметр. Там должен возвращаться Id-шник задачи.
Пробовал так:
Не работает. Точнее вываливается с ошибкой типа: my_proc ожидает параметр param1 и не получает его. И т.д. по остальному списку.
Пробовал в разных позах - не работает.
Инфу с примерами брал отсюда: https://metacpan.org/pod/DBD::Sybase#Ca ... Procedures
в развитие темы добавлю - у меня получилось подключиться к мсскл.
И даже вызвать хранимую процедуру с параметрами. Всё отрабатывает как надо.
Но есть проблема: я не могу из хранимой процедуры получить один ВЫходной параметр. Там должен возвращаться Id-шник задачи.
Пробовал так:
Код: Выделить всё
my $sth = $dbh->prepare("exec my_proc \@p1 = ?, \@p2 = ?, \@p3 = ? OUTPUT ");
$sth->execute('one', 'two', 'three');
my (@data) = $sth->syb_output_params();
Пробовал в разных позах - не работает.
Инфу с примерами брал отсюда: https://metacpan.org/pod/DBD::Sybase#Ca ... Procedures
Re: Как подключиться к БД MSSQL?
Если честно, то не лучший вариант поддерживать 2 DB соединения - и со стороны производительности, и со стороны безопасности, и со стороны создания Upgrade-safe решений.
По-моему, более правильно на машине с MSSQL создать Web-Service отдающий необходимые данные и использовать в OTRS спомощью GenericInterface ( http://doc.otrs.com/doc/manual/admin/5. ... .6.12.4.10 )
Если же решите оставить текущее решение ( эхх... ) то используйте следующую форму вызова Stored Procedure (предполагаю, что используете Sybase driver):
По-моему, более правильно на машине с MSSQL создать Web-Service отдающий необходимые данные и использовать в OTRS спомощью GenericInterface ( http://doc.otrs.com/doc/manual/admin/5. ... .6.12.4.10 )
Если же решите оставить текущее решение ( эхх... ) то используйте следующую форму вызова Stored Procedure (предполагаю, что используете Sybase driver):
Код: Выделить всё
my $sth = $dbh->prepare("exec my_proc ");
$sth->bind_param("p1",'one');
$sth->bind_param("p2",'two');
$sth->bind_param("p3","three");
my $result;
$sth->bind_inout_param("out1",\$result);
$sth->execute();
# output the value or do anything else
echo $result;
# cleanup resources after yourself.
$sth=undef;
$dbh->disconnect;
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
Re: Как подключиться к БД MSSQL?
Спасибо Вам.
А названия параметров p1, p2 и т.д. должны совпадать с названиями параметров из хранимой процедуры?
А названия параметров p1, p2 и т.д. должны совпадать с названиями параметров из хранимой процедуры?
Re: Как подключиться к БД MSSQL?
Да, конечно.
К примеру
К примеру
Код: Выделить всё
create procedure testproc @p1 int, @p2 int, @p3 int, @out1 int output as
select @out1=@p1+@p2+@p3
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
Re: Как подключиться к БД MSSQL?
К сожалению, по прежнему не могу получить выходной параметр. Что то с ним не так, или я что-то не так делаю.
И тишина... не могу получить task_id.. хоть убей... ((
т.е. Входные параметры точно передаются корректно. Хранимая процедура, по их значениям, создает объект правильно, но на выходе ничего не возвращает. Или возвращает, но я не могу правильно это забрать. Бьюсь уже который день.
Код: Выделить всё
my $sth = $dbh->prepare('exec dbo.create_task \@task_parent_id=?, \@task_name=?, \@record_comment=?, \@attachment_data=?, \@attachment_name=?, \@task_performer_id=?, \@task_priority=?, \@task_product_id=?, \@registration_number=?, \@task_id=? OUTPUT');
$sth->bind_param(1, 254957);
$sth->bind_param(2, '#100066');
$sth->bind_param(3, '');
$sth->bind_param(4, undef);
$sth->bind_param(5, '');
$sth->bind_param(6, 683);
$sth->bind_param(7, 'C');
$sth->bind_param(8, 1);
$sth->bind_param(9, 100066);
my $result = 0;
$sth->bind_param_inout(10, \$result, 0);
$sth->execute;
print "\n"."task_id = ".$result."\n";
т.е. Входные параметры точно передаются корректно. Хранимая процедура, по их значениям, создает объект правильно, но на выходе ничего не возвращает. Или возвращает, но я не могу правильно это забрать. Бьюсь уже который день.
Re: Как подключиться к БД MSSQL?
Может проблема не в запросе, а в stored procedure?
Можете запостить ее сюда?
К слову несколько комментариев о запросе:
1) Нет смысла двойного bind'a
достаточно
Притом, если в stored pocedure указан исходящий параметр, то не стоит указывать в exec ( OUTPUT )
Можете запостить ее сюда?
К слову несколько комментариев о запросе:
1) Нет смысла двойного bind'a
Код: Выделить всё
\@task_parent_id=?, ...
$sth->bind_param(1, 254957);
Код: Выделить всё
$sth->bind_param("task_parent_id",'254954');
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
-
- OTRS Гуру
- Сообщения: 5192
- Зарегистрирован: 20 сен 2010, 18:17
- Откуда: Москва
- Благодарил (а): 92 раза
- Поблагодарили: 82 раза
Re: Как подключиться к БД MSSQL?
"Тут у нас такие гости - украшение компаний" )))))
Артём, привет !
По сути теперь задам вопрос, но немного в сторону. Что за задача дикая такая, чтобы из внешней системы task_id получать хранимой процедурой Может дело не в бобине вообще.
И с точки зрения секьюрности так же соглашусь с Артёмом - из внешней системы разрешать запуск процедур очень нехорошо.
Мне кажется, мы имеем в наличии архитектурно кривую поставку задачи и, как следствие, попытки решения.
Артём, привет !
По сути теперь задам вопрос, но немного в сторону. Что за задача дикая такая, чтобы из внешней системы task_id получать хранимой процедурой Может дело не в бобине вообще.
И с точки зрения секьюрности так же соглашусь с Артёмом - из внешней системы разрешать запуск процедур очень нехорошо.
Мне кажется, мы имеем в наличии архитектурно кривую поставку задачи и, как следствие, попытки решения.
С уважением,
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
Алексей Юсов
Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal
Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!
Re: Как подключиться к БД MSSQL?
Здравствуйте.
1) Нет смысла двойного bind'a
достаточно
Дело в том, что предложенный Вами вариант, в таком виде не работает.
Perl выдает ошибку из серии: stored procedure or function dbo.create_task cant locate parameter @task_parent_id with supplied value... и т.д.
Работет если указать сразу в exec-выражении с именем хп и параметрами. Но проблема по прежнему остается: я не могу получить выходной параметр процедуры.
также пробовал и с OUTPUT и без него - реакция та же самая.
Причем, если указать 9 in-параметров, и пропустить 10-ый inout-параметр, то всё отрабатывает без ошибок. Но task_id я так и не могу получить.
Если кратко, она создает в БД объект "задачу", частью имени которой является номер (создаваемый этой хранимой процедурой). Вот этот номер то мне и нужно получить.
т.е. вариант, что хп работает как-то не правильно, думаю, можно, отмести. Я сам вижу созданную задачу со сгенерированным номером.
1) Нет смысла двойного bind'a
достаточно
Код: Выделить всё
$sth->bind_param("task_parent_id",'254954');
Perl выдает ошибку из серии: stored procedure or function dbo.create_task cant locate parameter @task_parent_id with supplied value... и т.д.
Работет если указать сразу в exec-выражении с именем хп и параметрами. Но проблема по прежнему остается: я не могу получить выходной параметр процедуры.
также пробовал и с OUTPUT и без него - реакция та же самая.
Причем, если указать 9 in-параметров, и пропустить 10-ый inout-параметр, то всё отрабатывает без ошибок. Но task_id я так и не могу получить.
Если кратко, она создает в БД объект "задачу", частью имени которой является номер (создаваемый этой хранимой процедурой). Вот этот номер то мне и нужно получить.
т.е. вариант, что хп работает как-то не правильно, думаю, можно, отмести. Я сам вижу созданную задачу со сгенерированным номером.
Re: Как подключиться к БД MSSQL?
И снова попрошу предоставить тело Хранимой процедуры Если запрос не отрабатывает, то возможно процедура объявлена некорректно.
А пока могу предложить статью, где описано, как создать REST service для вызова SP на Microsoft SQL Server
А пока могу предложить статью, где описано, как создать REST service для вызова SP на Microsoft SQL Server
Smile :)
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9
----------------------------------------
Artjoms Petrovs
System Analyst / Системный Аналитик
Software Developer / Разработчик Информационных Систем
----------------------------------------
OTRS 5 Patch Level 9