Как вызвать C# app / .exe из скрипта SSMS для запуска локально, а не на сервере? - PullRequest
1 голос
/ 22 января 2020

Я хочу построить различные столбцы из моих БД.

Похоже, простого способа сделать это из SQL Server Management Studio (SSMS) не существует, поэтому я создал небольшой C# приложение, которое берет имя таблицы и имя столбца и выполняет построение.

Я хотел бы вызвать это из SSMS, в файле. sql, с чем-то вроде:

EXEC "C:\\MyPlotApp.exe [dbo].[Table] ColA"

Я обнаружил xp_cmdshell НО это, кажется, выполняется на сервере, я хочу выполнить локально.

Я могу создать Внешний инструмент, указывающий на мой App.exe (даже если это не может быть выполнено непосредственно из SQL скрипт). В качестве параметров я перечисляю $(CurText), который передается в моей строке. Единственная проблема в том, что в окне результатов нет параметров для передачи имени таблицы и позиции курсора.

Ответы [ 2 ]

1 голос
/ 22 января 2020

SSMS поддерживает режим SQLCMD (Query -> SQLCMD Mode). Это позволяет использовать команды SQLCMD в окне запроса SSMS, включая команду !:: для синхронного запуска внешней программы на клиенте. Например:

:!! C:\MyPlotApp.exe "[dbo].[Table]" "ColA"
0 голосов
/ 22 января 2020

Насколько я могу судить, не существует простого способа передачи значений вкладки «Результаты» внешним инструментам. На данный момент я могу придумать только три варианта:

  1. Настройте приложение внешнего инструмента C# для чтения из буфера обмена. Затем в «таблице результатов» выберите столбец и нажмите Control- C (это скопирует все значения в буфер обмена). Затем запустите ваше внешнее приложение, которое будет читать этот список значений из буфера обмена и строить их. Не уверен, сколько строк вы работаете, но это может быть проблемой, если сотни тысяч / миллионы. Я полагаю, это зависит от того, сколько оперативной памяти имеет ваша рабочая станция.
  2. Технически, вам не требуется SSMS для выполнения запроса, просто чтобы вы могли передать результаты в другое приложение. Ваше приложение C# может выполнить запрос и непосредственно прочитать строки результатов.
  3. Если вы хотите получить фактический доступ к значениям таблицы «Results», вам нужно написать собственное расширение SSMS. Выполните поиск по созданию собственного расширения, так как существует несколько учебных пособий.
...