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

Откуда:
Сообщений: 123
Добрый день
Есть http-запрос
Query = "SELECT USER_ID,""Эл. почта"",""ФИО"",""Статус"" FROM USERS",
https://reportsapi.zoho.com/api/Zoho?ZOHO_ACTION=EXPORT&ZOHO_OUTPUT_FORMAT=JSON&ZOHO_ERROR_FORMAT=XML&authtoken=Token&ZOHO_API_VERSION=1.0&ZOHO_SQLQUERY=& Query

API позволяет уйти от sql запроса, если по другому не получится
Также скорее всего нужно будет передавать переменную - дату
С таким запросом удается работать, используя Excel (Power Query)
А как работать с ним с SQL Server?
Есть ли возможность отправлять http-запросы с T-SQL, и парсить в JSON или CSV?
Или только SSIS? (Не смог найти доступной инструкции как это делать в SSIS. Если есть возможность, пожалуйста тыкните пальцем)

Прошу вашей помощи в том, как можно решить задачу
20 дек 16, 17:54    [20028629]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
hulk77,

автор
Есть http-запрос


Запрос откуда взялся? Есть где? Попал куда?
20 дек 16, 18:03    [20028670]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
hulk77
Member

Откуда:
Сообщений: 123
Владислав Колосов
hulk77,

автор
Есть http-запрос


Запрос откуда взялся? Есть где? Попал куда?


Zoho - это компания, которая предоставляет аренду облачных продуктов. В том числе и CRM
Для аналитики нам нужно забирать данные с Zoho CRM и передавать данные в базу хранилища на SQL Server 2016
20 дек 16, 18:10    [20028686]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
hulk77
Member

Откуда:
Сообщений: 123
Или через PowerShell и не выдумывать?
SSIS видимо не оптимизирован еще под такие запросы..
20 дек 16, 18:50    [20028823]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
hulk77,

нет желания втягивать по капле ответы...
21 дек 16, 10:25    [20030618]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
hulk77
Member

Откуда:
Сообщений: 123
Владислав Колосов
hulk77,

нет желания втягивать по капле ответы...


Что именно нужно предоставить, скажите, конечно напишу

С документации Zoho взяли синтаксис API. Он работает, проверено в Excel PowerQuery и просто выполнением в браузере
Но нам данные нужно загружать в таблицу SQL Server
Это можно сделать через промежуточное звено PowerShell, но это и сложнее и хотелось бы переменные все таки передавать с SQL Server'а в запрос (например дату)

В инете нашел такой запрос

Declare @Object as Int ;
Declare @ResponseText as Varchar(8000) ;
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT ;
Exec sp_OAMethod @Object, 'open', NULL, 'get',
    'https://reportsapi.zoho.com/api/ZohoCRM?ZOHO_ACTION=EXPORT&ZOHO_OUTPUT_FORMAT=CSV&ZOHO_ERROR_FORMAT=XML&authtoken=&ZOHO_API_VERSION=1.0
&ZOHO_SQLQUERY=SELECT TOP 10 "USER_ID","Эл. почта","ФИО","Статус" FROM "USERS"',
    'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select  @ResponseText
Exec sp_OADestroy @Object


И хотя эта строка http-запрса выполняется в браузере, в SQL Server возвращает ошибку
<?xml version="1.0" encoding="UTF-8"?> <response uri="/api/zoho.admin@genioteam.com/ZohoReportsCRM" action="EXPORT"> <error> <code>7407</code> <message>В запросе SELECT используется недопустимый столбец '??. ?????'.
* Если это не так, заключите название столбца в двойные кавычки (" ") при наличии в нем любых специальных знаков, таких как пробел, -, % и т. д.
* Если это строковый параметр,
заключите его в одинарные кавычки (например, 'Андрей Иванович') * Если название используемого столбца является ключевым словом какого-либо диалекта SQL, заключите название такого столбца в двойные кавычки (" ").
Пример: "дата"</message> </error> </response>


Но сам автор этого запроса на sp_OACreate описывал что действует ограничение в 8 тыс символов.. Это усложняет дело..
Может есть другие варианты?
Искренне буду благодарен любому совету
Если что не так объяснил, подскажите пож, распишу детально
21 дек 16, 11:59    [20031226]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
естm ещё responseXML

а вообще это не дело SQL сервера такими вещами заниматься
21 дек 16, 12:05    [20031260]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
hulk77,
<response uri="/api/zoho.admin@genioteam.com/ZohoReportsCRM" action="EXPORT"> <error> <code>7407</code> <message>В запросе SELECT используется недопустимый столбец '??. ?????'.
Не нравятся ему названия столбцов на русском, потому что они перед отправкой транслируются в фигню. Играйте с COLLATION
21 дек 16, 13:22    [20031684]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
sp_OACreate - это плохо, напишите CLR функцию. Идентификаторы заключите в прямоугольные скобки.
21 дек 16, 13:47    [20031832]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
+ всегда указывайте схему объектов (таблиц, процедур и т.д.).
21 дек 16, 13:48    [20031840]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
hulk77
Member

Откуда:
Сообщений: 123
Владислав Колосов
sp_OACreate - это плохо, напишите CLR функцию. Идентификаторы заключите в прямоугольные скобки.


Пробую таким образом:

C#:

+
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Collections;
using System.Globalization;

// For the SQL Server integration
using Microsoft.SqlServer.Server;

// Other things we need for WebRequest
using System.Net;
using System.Text;
using System.IO;

namespace SqlWebRequest
{
    public partial class Functions
    {
        // Function to return a web URL as a string value.
        [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
        public static SqlString GET(SqlString uri, SqlString username, SqlString passwd)
        {
            // The SqlPipe is how we send data back to the caller
            SqlPipe pipe = SqlContext.Pipe;
            SqlString document;

            // Set up the request, including authentication
            WebRequest req = WebRequest.Create(Convert.ToString(uri));
            if (Convert.ToString(username) != null & Convert.ToString(username) != "")
            {
                req.Credentials = new NetworkCredential(
                    Convert.ToString(username),
                    Convert.ToString(passwd));
            }
            ((HttpWebRequest)req).UserAgent = "CLR web client on SQL Server";

            // Fire off the request and retrieve the response.
            // We'll put the response in the string variable "document".
            WebResponse resp = req.GetResponse();
            Stream dataStream = resp.GetResponseStream();
            StreamReader rdr = new StreamReader(dataStream);
            document = (SqlString)rdr.ReadToEnd();

            // Close up everything...
            rdr.Close();
            dataStream.Close();
            resp.Close();

            // .. and return the output to the caller.
            return (document);
        }
}


T-SQL:

+
USE [myDatabase]
GO
CREATE ASSEMBLY SqlWebRequest
FROM 'C:\DLL\SqlWebRequest.dll'
WITH PERMISSION_SET=UNSAFE;
GO


USE [myDatabase]
GO
CREATE FUNCTION [dbo].[fn_get_webrequest](
     @uri        nvarchar(max),
     @user       nvarchar(255)=NULL,
     @passwd     nvarchar(255)=NULL
)
RETURNS nvarchar(max)
AS
EXTERNAL NAME SqlWebRequest.Functions.GET;
GO


Получаю ошибку

сообщение: 6505, уровень: 16, состояние: 2, процедура: fn_get_webrequest, строка: 1 [строка начала пакета: 23]
Не удалось обнаружить тип "Functions" в сборке "SqlWebRequest".


Вроде верно указано и метод и класс и название сборки
Подскажите, пожалуйста, что не так? где ошибка?
21 дек 16, 14:48    [20032218]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
CREATE FUNCTION [dbo].[fn_get_webrequest](
     @uri        nvarchar(max),
     @user       nvarchar(255)=NULL,
     @passwd     nvarchar(255)=NULL
)
RETURNS nvarchar(max)
AS
EXTERNAL NAME [SqlWebRequest].[SqlWebRequest.Functions].[GET];
21 дек 16, 15:11    [20032397]     Ответить | Цитировать Сообщить модератору
 Re: http запрос с результатами в таблицу SQL Server  [new]
hulk77
Member

Откуда:
Сообщений: 123
Руслан Дамирович,

Огромное спасибо Вам и всем кто откликнулся.
Это работает
21 дек 16, 15:27    [20032492]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить