Как я могу одновременно экспортировать план выполнения XML и получать имена столбцов в таблицах?

Мне нужно получить как полный текст фактического плана выполнения, так и полную таблицу результатов с именами столбцов из sqlcmd. Мое первое требование заставляет меня передать -y 0, как описано здесь. Однако, похоже, это отключает имена столбцов, отображаемые в выводе моей таблицы. Я не могу найти никаких упоминаний об этом в документации. Итак, как я могу одновременно передать -y 0 и получить имена столбцов?

Альтернативы sqlcmd не подходят. Я использую sqlcmd, потому что, насколько я могу судить, Emacs требует этого, а Emacs — единственная известная мне IDE для Microsoft SQL Server в Linux. Моя версия

~$: sqlcmd -?
Инструмент командной строки Microsoft (R) SQL Server
Версия 18.2.0001.1 Linux
Авторские права (C) принадлежат корпорации Microsoft, 2017 г. Все права защищены.

Разве Azure Data Studio не поддерживает Linux?

siggemannen 01.07.2024 14:28

Да, и я использую его ежедневно в Linux, @siggemannen. Он даже имеет встроенную поддержку планов запросов. Не говоря уже о том, что помимо Emacs существуют и другие IDE: DBeaver в качестве еще одного примера (не то, чтобы я рекомендовал его использовать).

Thom A 01.07.2024 14:28

@ThomA, возможно, ОП действительно хотел получить список интерфейсов Linux, но не хотел, чтобы его отвергли, и, возможно, мы попали в ловушку

siggemannen 01.07.2024 14:37

Честно говоря, для меня, @siggemannen, это пахнет XY-проблемой.

Thom A 01.07.2024 14:39

@siggemannen Или я просто зашел в Emacs в качестве своего первого решения, больше никогда не проверял и хочу посмотреть, смогу ли я заставить его работать так, как хотелось. ADS, возможно, неплохая идея, но сейчас я глубоко запутался в Emacs.

J. Mini 01.07.2024 14:40

Не правда ли, было бы очень сложно понять план запроса в текстовом режиме? Мне нравится ваш стиль, но, судя по другим вашим вопросам, вам очень нравится усложнять себе жизнь :)

siggemannen 01.07.2024 14:52

Итак, поскольку вы решили использовать Emacs, вы теперь вынуждены использовать Emacs, и, следовательно, ваше утверждение «Emacs — единственная известная мне IDE для Microsoft SQL Server в Linux» на самом деле совершенно не имеет отношения к делу? Дело не в том, что вы не знаете о других IDE, а в том, что вы не хотите использовать другие IDE (или вам говорят, что вам это запрещено по каким-либо причинам)?

Thom A 01.07.2024 14:54
dba.stackexchange.com/a/233200/276164 намекает, что -y 0 полностью удаляет заголовки, хотя это может быть не задокументировано
siggemannen 01.07.2024 14:58

В sqlcmd явно указано, что использование параметров -h и -y являются взаимоисключающими, @siggemannen: Sqlcmd: The -h and the -y 0 options are mutually exclusive. Как ни странно, в sqlcmd-go он не генерирует указанную ошибку (он просто не возвращает заголовки).

Thom A 01.07.2024 15:00

@ThomA Я знал, что ADS существует, но не знаю о его поддержке Linux.

J. Mini 01.07.2024 15:07

@siggemannen У меня есть сторонний инструмент для чтения XML плана выполнения.

J. Mini 01.07.2024 15:07

«но я не знаю о поддержке Linux». Как я уже говорил, он поддерживается в Linux (так что теперь вы знаете). Я запускал его в Linux с тех пор, как он назывался «SQL Operations Studio» (и мне бы хотелось, чтобы он все еще назывался так, сброс «Azure» в начале имени был глупостью Microsoft...). Он разработан с учетом кросс-платформенной совместимости. Единственная платформа, которую он не поддерживает (пока), — это ARM64 в Linux; не знаю, почему для этого нет сборки (пока), поскольку такие сборки есть и у Windows, и у Apple.

Thom A 01.07.2024 15:11

@ThomA Спасибо. Я посмотрю. Это все еще отстой по сравнению с SSMS? Я слышал, что Кендра Литтл очень много работала над его улучшением.

J. Mini 01.07.2024 15:13

Почему бы не попробовать и посмотреть, насколько он вам понравится по сравнению с emacs? Честно говоря, большинство вещей лучше, чем SSMS, единственная сила — в функциональной поддержке, а не в стиле графического интерфейса.

siggemannen 01.07.2024 15:18

За последние годы он прошел долгий путь. Кендра усердно работала над добавлением множества новых функций, некоторые из которых также не появятся в SSMS. Это разные инструменты, о которых люди, похоже, забывают; То, что Microsoft поначалу назвала ADS «заменой Linux SSMS», является одной из причин, почему изначально она была так плохо принята, хотя на самом деле это не так. Я признаю, что в SSMS есть функции, которые мне хотелось бы иметь в ADS, но на самом деле есть некоторые функции ADS, которые мне бы хотелось, чтобы SSMS тоже время от времени поддерживала. Это «качели и карусели». Я с удовольствием использую оба и наслаждаюсь этим опытом уже пару лет.

Thom A 01.07.2024 15:18

Но отклоняемся от темы для Stack Overflow . Хотя это могла бы быть хорошая дискуссия.

Thom A 01.07.2024 15:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
16
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не знаю, есть ли какая-либо документация по этому поводу, но недавно я имел удовольствие прочитать исходный код sqlcmd-go, где мы можем увидеть, как печатаются заголовки:

https://github.com/microsoft/go-sqlcmd/blob/main/pkg/sqlcmd/format.go#L150

if f.vars.RowsBetweenHeaders() > -1 && f.format == "horizontal" && !f.xml {
        f.printColumnHeadings()
    }

Глядя на определение RowsBetweenHeaders, там говорится:

https://github.com/microsoft/go-sqlcmd/blob/main/pkg/sqlcmd/variables.go#L164

// RowsBetweenHeaders is the value of SQLCMDHEADERS variable.
// When MaxVarColumnWidth() is 0, it returns -1
func (v Variables) RowsBetweenHeaders() int64 {
    if v.MaxVarColumnWidth() == 0 {
        return -1
    }
    h := mustValue(v[SQLCMDHEADERS])
    return h
}

Таким образом, может показаться, что эти два параметра находятся в противоречии друг с другом.

Возможно, вам повезет добавить задачу или запрос на включение, чтобы добавить еще одну опцию, которая все равно печатает заголовки, например: --always-print-long-values-as-if-max-width-is-0-but-headers-are-still-ok-to-print. Я мог бы даже проголосовать за это

Это версия Go. Вы уверены, что это применимо?

J. Mini 07.07.2024 15:12

Предполагается, что это функциональный эквивалент, и у меня нет под рукой кода «реальной» версии.

siggemannen 07.07.2024 15:17

И ты не сможешь, @siggemannen. Версия, отличная от Go, не имеет открытого исходного кода.

Thom A 09.07.2024 13:17

Другие вопросы по теме