Показаны сообщения с ярлыком T-SQL. Показать все сообщения
Показаны сообщения с ярлыком T-SQL. Показать все сообщения

29 марта 2023

MS SQL Server. Управление контекстом безопасности подключения к связанным серверам

    Механизм связанных серверов MS SQL Server позволяет реализовать распределенные базы данных, которые работают с данными в других базах данных. "Связаться" можно с любым источником данных, для которого существует возможность подключения к нему с использованием OLE DB. Есть два шага обеспечения безопасности при подключении к удаленной базе данных связанного сервера:
  1. сопоставить имена пользователей локального сервера MS SQL Server с именами пользователей удаленного сервера;
  2. указать, как связанный сервер должен обрабатывать подключение пользователей, имена которых не сопоставлены.
Оба эти шага из T-SQL выполняются с помощью процедуры sp_addlinkedsrvlogin. Она создает или обновляет сопоставление между учетными записями пользователей локального и удаленного серверов. Название процедуры намекает на шаг с сопоставлением имен пользователей, но определенные комбинации ее параметров позволяют управлять подключением всех не сопоставленных пользователей.

22 сентября 2021

MS SQL Server. Получение из файловой системы списка папок и файлов

    Иногда работа с базами данных подкидывает не стандартные задачи. Например, недавно мне в скрипте MS SQL Server понадобилось получить из файловой системы список папок и файлов. Мои попытки сделать это через объект Scripting.FileSystemObject потерпели неудачу. Его метод GetFolder по имени папки возвращает объект Folder, у которого есть свойства SubFolders/Files содержащее списки вложенных папок и файлов. Но проблема в том, что эти списки – это коллекции, элементы которых в VBA можно перебрать в цикле "For Each File in Folder.Files", а из скрипта T-SQL к их элементам можно обратиться только по имени папки/файла (exec sp_OAMethod @objItems, N'Item("FileName.txt")', @objItem out). То есть для получения списка папок и файлов объект Scripting.FileSystemObject не подходит. Поиск в интернете позволил мне сформулировать 4 различные способа решения этой задачи.

15 апреля 2021

Сортировка по текстовому полю содержащему комбинацию букв и цифр

    Сортировка результата SQL запроса – это то, с чем программисты сталкиваются постоянно. Обычно СУБД при сортировке текстовых полей для сравнения строк использует лексикографический порядок. Согласно Википедии, он означает, что слово X предшествует слову Y (X < Y), если:
  • либо слово X является началом слова Y (например, "МАТЕМАТИК" < "МАТЕМАТИКА");
  • либо первые m символов этих слов совпадают, а m+1-й символ слова X меньше m+1-го символа слова Y (например, "АБАК" < "АБРАКАДАБРА", так как первые две буквы у этих слов совпадают, а третья буква у первого слова меньше, чем у второго).
Этот способ сортировки строк подходит для большинства случаев. Проблемы могут возникнуть если строки содержат в себе комбинацию букв и цифр, а пользователи захотят видеть сортировку в "естественном порядке". Естественный порядок сортировки – это упорядочение строк в лексикографическом порядке, за исключением того, что многозначные числа обрабатываются атомарно (то есть, как один символ).
 Лексикографический порядок   Естественный порядок 
a12 a2a
a22 a2b
a2a a3a2
a2b a3a2a
a30z a12
a3a2 a22
a3a2a a30z

08 октября 2020

Табличные переменные в динамическом SQL

    Табличные переменные являются одной из интересных возможностей MS SQL Server. Эта удобная альтернатива временным таблицам, которую можно использовать для хранения небольших наборов данных в виде строк таблицы. Сегодня мне впервые потребовалось использовать их совместно с динамическим SQL.