Advertisement
PVI_COPY

PROCEDURE [dbo].[api_daDataAddress_response]_1

Jul 16th, 2020
635
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.83 KB | None | 0 0
  1. CREATE PROCEDURE [dbo].[api_daDataAddress_response]
  2.     @response nvarchar(max),
  3.     @parameters ExtendedDictionaryParameter READONLY,  -- входящие параметры для внутренней обработки (используйте Key, Value2 - те же что и на request)
  4.    
  5.     @username nvarchar(32)
  6. AS
  7. BEGIN
  8.  
  9.    -- ОТЛАДКА
  10.     insert into as_trace ( header, text, username, code , created )  values( 'LEN @response ', LEN ( @response ) , @username, 'api_daDataAddress_response' , GETDATE() )  
  11.     insert into as_trace ( header, text, username, code , created )  values( '@response - 1    , 1024 ', SUBSTRING ( @response , 1    , 1024 ) , @username, 'api_daDataAddress_response' , GETDATE() )  
  12.  
  13.     DECLARE @json1 NVARCHAR(MAX)  = N''
  14.     SET @json1 = @response    
  15.  
  16.     -- Для проверки правильности JSON формата существует функция ISJSON, которая возвращает 1, если это JSON, 0 — если нет и NULL, если был передан NULL
  17.     DECLARE @presentJSON bit = 0
  18.     SELECT @presentJSON = ISNULL( ISJSON( @json1 ) , 0 )
  19.  
  20.     IF @presentJSON <> 1
  21.     BEGIN
  22.         SELECT 'Ошибка! Строка @response не является JSON!' Msg, 0 Result, @response Response
  23.         RETURN
  24.     END
  25.  
  26.  
  27. DECLARE @T table( value_Address VARCHAR(200), postal_code VARCHAR(200),
  28.                   data_region_with_type  VARCHAR(200),
  29.                   data_region_kladr_id VARCHAR(200), data_city_kladr_id VARCHAR(200), data_street_kladr_id VARCHAR(200), data_house_kladr_id VARCHAR(200))
  30.  
  31. INSERT INTO @T
  32. SELECT Query.value_Address  , ISNULL(Query.data_postal_code ,'' ) as postal_code
  33.       , Query.data_region_with_type  
  34.       , Query.data_region_kladr_id , Query.data_city_kladr_id , Query.data_street_kladr_id , Query.data_house_kladr_id
  35.    
  36. FROM OPENJSON(@json1, N'$.suggestions') -- Зашли в массив  , далее в WITH считаем , что адреса уже внути массива
  37. WITH (
  38.        value_Address        VARCHAR(200)    N'$.value' -- Адрес одной строкой (как показывается в списке подсказок)
  39.      , data_postal_code     VARCHAR(200)    N'$.data.postal_code'       -- Индекс
  40.      , data_region_with_type VARCHAR(200)    N'$.data.region_with_type' -- Регион с типом  
  41.      , data_region_kladr_id VARCHAR(200)    N'$.data.region_kladr_id'   -- "region_kladr_id": "7700000000000", -- Код КЛАДР региона
  42.      , data_city_kladr_id   VARCHAR(200)    N'$.data.city_kladr_id'     -- "city_kladr_id": "7701100200000", -- Код КЛАДР города
  43.      , data_street_kladr_id VARCHAR(200)    N'$.data.street_kladr_id'   -- data.street_kladr_id     Код КЛАДР улицы
  44.      , data_house_kladr_id  VARCHAR(200)    N'$.data.house_kladr_id'    -- data.house_kladr_id  Код КЛАДР дома
  45.     ) AS Query  
  46.    
  47. DECLARE @countAllRecords int = 0 , @countPostalCode int = 0
  48. SELECT  @countAllRecords = ISNULL( COUNT(*) , 0 ) , @countPostalCode = ISNULL( COUNT(DISTINCT postal_code) , 0 ) FROM  @T
  49. -------------------------------------------------------------------------------------------------------------------------
  50. -- Формирование таблицы с результатами -- вывод таблицы (по результатам запроса парсинга)  -- таблица - форматирование html
  51. DECLARE @tableData       nVARCHAR(max) = ''
  52. IF @countAllRecords > 0
  53. BEGIN -- есть записи в табл.
  54.       -- заголовок табл.
  55.       SELECT  @tableData = '<table class="table table-bordered"><thead><tr><th scope="col">Адрес</th><th scope="col">Индекс</th></tr></thead><tbody>'
  56.            
  57.       -- подготовка данных - с разметкой - все в одну строку <tr> <td>...</td> </tr>
  58.       SELECT  @tableData = ISNULL( @tableData ,'' )
  59.            + '<tr>' + '<td>'+value_Address +'</td>' + '<td>'+ISNULL(postal_code ,'no' ) +'</td>' + '</tr>'
  60.       FROM @T  -- dbo.api_daData_searchLogData    
  61.     --  закрыть табл.
  62.     SELECT @tableData = @tableData + '</tbody> </table>'
  63.  
  64.  
  65.     insert into as_trace ( header, text, username, code , created )  values( ' @tableData',  @tableData , @username, 'api_daDataAddress_response' , GETDATE() )  
  66. END
  67. -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --
  68. -------------------------------------------------------------------------------------------------------------------------
  69. DECLARE @region_with_type VARCHAR(200) = '' -- Регион с типом -- по факту город
  70. -- Список /городов
  71. SELECT  @region_with_type = ISNULL( @region_with_type ,'') + QUOTENAME( t1.data_region_with_type)
  72. FROM (
  73.       SELECT DISTINCT data_region_with_type FROM @T  -- dbo.api_daData_searchLogData --order by 1
  74.      ) t1
  75.  
  76.     -- SELECT 1
  77.     -- CHAR(10) Заменено на '<BR>'
  78.     select 'Результаты запроса: Регион: '+ @region_with_type+'.'+'<BR>'+' Найдено уникальных почт.индексов - ' + TRY_CAST( @countPostalCode AS nvarchar) + +'.'+'<BR>'+' Адресов - ' + TRY_CAST( @countAllRecords AS nvarchar)+'.' Msg
  79.          , 1 Result
  80.          -- , @response Response --ТАК  при вызов из формы вернет оригинальный  @response !!!
  81.          ,'Результаты запроса: Регион: '+ @region_with_type+'.'+'<BR>'+' Найдено уникальных почт.индексов - ' + TRY_CAST( @countPostalCode AS nvarchar) + +'.'+'<BR>'+' Адресов - '
  82.          + TRY_CAST( @countAllRecords AS nvarchar)+'.' +'<BR>'
  83.          -- ниже идет табл. с данными
  84.          + IIF ( @tableData = '', '' , @tableData )
  85.          AS Response
  86.  
  87.     -- SELECT 2 Внешние действия
  88.  
  89. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement