Ответы пользователя по тегу SQL Server
  • Как сформировать SQL запрос?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Вообще обычно для этого используется функция PIVOT TABLE

    Твой пример

    Результат:
    +=========+=======+==========+============+============+============+============+
    | fam     | name  | otch     | 2021-03-17 | 2021-03-18 | 2021-03-19 | 2021-03-23 |
    +=========+=======+==========+============+============+============+============+
    | Петров  | Иван  | Иванович | 0          | 0          | 3          | 3          |
    +---------+-------+----------+------------+------------+------------+------------+
    | Сидоров | Петр  | Иванович | 4          | 4          | 0          | 4          |
    +---------+-------+----------+------------+------------+------------+------------+
    | Смирнов | Федор | Иванович | 0          | 0          | 0          | 5          |
    +---------+-------+----------+------------+------------+------------+------------+
    Ответ написан
  • Можно ли прочитать данные, если есть ошибки, и залить их в другую БД?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    !Рекомендую сначала сделать физическую копию файлов БД (mdf,ldf)!
    Как вариант определить битые таблицы по ID, и попробовать Checktable на конкретных таблицах сначала Repair_rebuild, если СУБД ответит что минимальный уровень - REPAIR_ALLOW_DATA_LOSS , значит сделать Checktable(<ПутьКТаблице>,REPAIR_ALLOW_DATA_LOSS ). Покоцанные страницы таблиц будут очищены, но те, что не покоцаны, должны стать доступны для работы (часть данных потеряется, но БД должна стать доступна для работы).
    Если определить битые таблицы по ID - проблематично (по каким-то причинам) можно сразу на БД зарядить :
    DBCC CheckDB (<ИМЯБД>, REPAIR_ALLOW_DATA_LOSS).
    Т.е. скрипт примерно такой:
    USE ИмяБД;
    GO  
    --(Далее выполнять поочереди)
    EXEC sp_resetstatus 'ИмяБД'
    GO
    
    ALTER DATABASE 'ИмяБД' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    
    --Попробовать:
    DBCC CHECKALLOC (ИмяБД, REPAIR_REBUILD) WITH NO_INFOMSGS
    GO
    
    --Если СУБД сообщит, что для исправления ошибок - минимальный уровень 
    --REPAIR_ALLOW_DATA_LOSS тогда:
    DBCC CheckDB (ИмяБД, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS
    GO
    
    ALTER DATABASE ИмяБД SET MULTI_USER
    GO
    Ответ написан
  • Как заставить сервер c 2xE5-2630 v4, 128GB, raid ssd грузить процессор на 100% (тест Гилева 21,65)?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Загрузить процессор на MSSQL можно так :
    - Должна быть задача на SQL серваке, которая потребует этих ресурсов (в простое или при малых задачах SQL проц не загрузит)
    - Ставим параллелизм = количеству ядер
    - Ставим Стоимостной порог в 0.
    После завершения текущих проверок, советую вернуть MAXDOP/MaxThreshhold на (1/4 или 1/8 от количества ядер а порог выявить методом проб и замеров). Дело в том, что загрузка проца 100% не значит что всё будет быстрее (только в некоторых случаях типа проверки целостности). Т.к. при распараллеливании запросов по ядрам, появляются "Накладные расходы" на распараллеливание и сбор обратно результатов воедино. Это будет выглядеть как ожидания CXPACKET и Latch. (См "закон Амадала" + CXPACKET в гугле)
    2. "Проверка целостности базы данных" - на ежедневной основе смысла не имеет, особенно если база достаточно крупная. Её имеет смысл делать или при возникновении проблем, или раз в квартал/месяц ... зависит от размеров базы. UPD: Лучше всё же её делать, если позволяет размер и тех. окно. Т.к. можно упустить ошибку целостности и перенести её в бэкап.
    3. Если есть проблемы с производительностью, это вопрос не простой, и требует кучу опыта. Навскидку рекомендую сначала проверить :
    - Нагрузку на дисковую подсистему, и если там будет проблема (Очередь к диску более 2 в среднем) выполнить разнесение *.mdf, *.log, tempdb, инстанс кластера 1c серверов на отдельные диски.
    - Нагрузку на оперативку от MSSQL (можете гуглить это может вызывать большую активность IO на дисковую подсистему)
    - Проверить способ коннекта к MSSQL ("Shared memory" должно быть "on" и использоваться, если 1с сервак и mssql сервак физически на одно машине .. это +10% к производительности.
    ну и куча чего ещё ... в одном посте всего не расписать.
    и т.д. вариантов очень много.
    главный совет: решайте проблемы , только если она есть и мешает, если это лично ваше мнение, а пользователям не мешает, лучше делайте настройки по дефолту (см. APDEX, анализ производительности)
    UPD: И да, виртуалки для 1C + MSSQL = зло, и не потому что "фирма 1С плохая", а потому что у вас не сможет 1С и MSSQL не сможет общаться через оперативку, и между оператором чтения на MSSQL до железа сервера будет 4 прослойки (SQLOS, OS виртуалки, Гипервизор, OS сервера, вместо SQLOS + OS сервера).
    Ответ написан
  • Как в Вывести обединение таблиц по условию ??

    Mikhail_E
    @Mikhail_E
    1С, SQL
    Для описанного примера подходит left join, а для вывода строки при несовпадении использовать функции IsNull и Cast :

    TSQL пример

    Результат :

    +==================+======+===========+
    | name             | code | AutorCode |
    +==================+======+===========+
    | BookWithAutor    | 1    | 1         |
    +------------------+------+-----------+
    | BookWithoutAutor | 3    | Empty     |
    +------------------+------+-----------+
    Ответ написан
  • Внешний обработчик 1с а не работает. Как решит?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    судя по всему, у вас "внешний источник данных" в 1С некорректно подключен (или пропал из досягаемости сервера 1С).
    Решение, точно, пошагово не подскажу, но решение лежит в примерно там :
    1С => Запуск приложения => Меню => Все функции => Стандартные => Управление внешними источниками данных => [Источник к которому идёт обращение в "ВнешняяОбработка.ТекстБиллинг.Форма.Форма.Форма(816)"].
    Нужно проверить подключение (возможно переподключить/Проверить строку подключения)
    Ответ написан