Сервис для приема вызовов со скорой помощи — VitacardService
MSSQL 2012 Linked Server: Ошибка на транспортном уровне при получении результатов с сервера. (provider: Shared Memory Provider, error: 0 — Канал был закрыт.)
Posted: 9th Август 2018 by lis in MSSQLПроблема:
При выполнении запроса из связанного сервера через openrowset:
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\temp\Таблица соответ.xlsx', [Лист1$])
останавливается служба сервера и в панели результата запроса выходит сообщение об ошибке:
Сообщение 109, уровень 20, состояние 0, строка 0
Ошибка на транспортном уровне при получении результатов с сервера. (provider: Shared Memory Provider, error: 0 — Канал был закрыт.)
На сервере установлен MSSQL 2012 SP4.
Решение:
Чтобы сервер не крашился нужно установить хотфикс:
Прямая ссылка на хотфикс: https://support.microsoft.com/ru-ru/hotfix/kbhotfix?kbnum=2859413&kbln=en-US
После этого запрос стал выдавать следующую ошибку:
Не удалось получить требуемый интерфейс («IID_IDBCreateCommand») от поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера
Данную проблему удалось решить следующим образом:
В свойствах провайдера нужно включит галочку: Allow inprocess (Допускать в ходе процесса)
Далее ПУСК — выполнить: Dcomcnfg
Службы компонентов — Мой компьютер — Настройка DCOM — MSDAINITIALIZE, щелкаем правой кнопкой, переходим на вкладку безопасность и во всех трёх группах переводим пульку на «Настроить», в каждой группе щелкаем кнопку «Изменить» и если у вас служба сервера стартует под учетной записью MSSQLSERVER, добавляем в каждой группе полные права для этой учетной записи. После этого запрос стал выполняться правильно.
Задача: Дан список из 1000 чисел, в каждом числе по 5 цифр:
12345
12346
12342
12341
12121
…
нужно каждое число заключить в кавычки:
‘12345’
Ускорение работы в SSMS с помощью сочетаний клавиш для запроса (Query Shortcuts)
Posted: 12th Июнь 2018 by lis in MSSQLДля привязки выполнения рутинных запросов к горячим клавишам в SQL Server Management Studio есть механим, который доступен по следующему пути в русскоязычной версии:
«Сервис» — «Параметры» — «Среда» — «Клавиатура» — «Сочетания клавиш для запроса»
и по этому в англоязычной:
«Tools» — «Options» — «Environment» — «Keyboard» — «Query Shortcuts»
Там уже существует несколько привязок сочетаний клавиш к системным хранимым процедурам, например: alt+f1 вызывает системную переменную sp_help, в которую в качестве параметра передает выделенный текст.
Для ускорения работы с SSMS я советую добавить следующие запросы:
1. select * from
2. select top (100) * from
3. select count(*) from
Теперь, например, чтобы узнать количество записей в какой-либо таблице достаточно выделить текст с именем этой таблицы в SSMS и нажать комбинацию клавиш, к которой вы привязали запрос select count(*) from
На сервере для прозрачной авторизации (с помощью учетной записи Windows) используется отдельный порт для подключения клиента. Если в серверном конфиге блок для подключения уже прописан, то можете переходить к настройке клиентов, если же блок для подключения клиентов с Windows-авторизацией отсутствует, то его необходимо добавить и перезапустить службу для применения изменений.
<configuration> <system.runtime.remoting> <channels> <-- блок для подключения клиентов с Windows-авторизацией --> <channel ref="tcp" name="tcp0" port="32750" secure="true"> <serverProviders> <provider type="GEst.Remoting.SspiServerSinkProvider, VCLib.Server" compression="false" notCompressedRequestLength="1024" /> <formatter ref="binary" typeFilterLevel="Full" /> </serverProviders> </channel> <-- конец блок для подключения клиентов с Windows-авторизацией --> <-- блок для подключения клиентов с обычной авторизацией по логину и паролю --> <channel ref="tcp" name="tcp1" port="32751"> <serverProviders> <provider type="GEst.Remoting.BasicServerSinkProvider, VCLib.Server" encryption="false" compression="false" notCompressedRequestLength="1024" /> <formatter ref="binary" typeFilterLevel="Full" /> </serverProviders> </channel> <-- конец блок для подключения клиентов с обычной авторизацией по логину и паролю --> </channels> </application> </system.runtime.remoting>
Чтобы в АИС ЛПУ (Витакарта) запретить создавать новых пользователей с простыми паролями можно создать валидацию с проверкой по регулярному выражению:
Создаем валидацию на сущности USERS
текст валидации:
Ошибка: Поставщик «VFPOLEDB» не зарегистрирован на локальном компьютере.
Posted: 29th Май 2018 by lis in АИС ЛПУ, ВитакартаОшибка при выгрузке заявочного списка из АИС ЛПУ (Витакарта):
Ошибка при попытке доступа к XLSX-файлу из MSSQL — Cannot initialize the data source object of OLE DB provider «Microsoft.ACE.OLEDB.12.0» for linked server «(null)».
Posted: 27th Май 2018 by lis in MSSQLЗадача: получить набор данных из Excel-файла в виде результата запроса SQL.
Все необходимые опции, заранее, были включены следующим скриптом:
НАПОМИНАЮ, ЧТО ПЕРЕД ТЕМ, КАК ВЫ БУДЕТЕ ЧТО-ТО ДЕЛАТЬ С РАБОЧЕЙ БД ОБЯЗАТЕЛЬНО НУЖНО СДЕЛАТЬ ЕЁ БЭКАП!
Я совсем недавно стал практиковаться с SQL и, начал осознавать, что многие рутинные задачи манипулирования данными можно решить посредством паттернов (шаблонов). Другими словами, например, если стоит задача избавиться от дублирующихся записей в какой-либо таблице, нет необходимости каждый раз «изобретать велосипед», достаточно взять за основу шаблон кода, немного переписать его под нужную таблицу и скрипт избавления от дубликатов готов.
Данное решение мне показал мой наставник по SQL — Ильнур, и я решил увековечить его в своем блоге.
Для примера в этой статье я буду рассматривать поиск дубликатов-сотрудников, в таблице T_WORKER, перепривязку всех внешних ключей на одного из сотрудника-дубликата, с целью оставить одного из дубликатов полностью без зависимых записей в других таблицах, и дальнейшее удаление всех сотрудников-дубликатов, оставив из каждой дублирующейся записи только одну. Следующий скрипт:
Проверка на изменение какого-либо поля у существующего объекта в АИС ЛПУ (Витакарта)
Posted: 13th Май 2018 by lis in АИС ЛПУ, ВитакартаДля того, чтобы не допустить изменения какого-либо поля у существующего объекта можно построить валидацию по примеру со следующей:
Данная валидация запрещает изменение кода врача у уже существующих врачей. Построена на сущности POST.
Текстовый вид валидации:
(if ({ObjectProperties / Fields / Code} & 8 > 0 And {ObjectProperties / IsNew} = False) "Код врача недоступен для редактирования!" else Null())