Мне нужно получить как полный текст фактического плана выполнения, так и полную таблицу результатов с именами столбцов из 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 г. Все права защищены.
Да, и я использую его ежедневно в Linux, @siggemannen. Он даже имеет встроенную поддержку планов запросов. Не говоря уже о том, что помимо Emacs существуют и другие IDE: DBeaver в качестве еще одного примера (не то, чтобы я рекомендовал его использовать).
@ThomA, возможно, ОП действительно хотел получить список интерфейсов Linux, но не хотел, чтобы его отвергли, и, возможно, мы попали в ловушку
Честно говоря, для меня, @siggemannen, это пахнет XY-проблемой.
@siggemannen Или я просто зашел в Emacs в качестве своего первого решения, больше никогда не проверял и хочу посмотреть, смогу ли я заставить его работать так, как хотелось. ADS, возможно, неплохая идея, но сейчас я глубоко запутался в Emacs.
Не правда ли, было бы очень сложно понять план запроса в текстовом режиме? Мне нравится ваш стиль, но, судя по другим вашим вопросам, вам очень нравится усложнять себе жизнь :)
Итак, поскольку вы решили использовать Emacs, вы теперь вынуждены использовать Emacs, и, следовательно, ваше утверждение «Emacs — единственная известная мне IDE для Microsoft SQL Server в Linux» на самом деле совершенно не имеет отношения к делу? Дело не в том, что вы не знаете о других IDE, а в том, что вы не хотите использовать другие IDE (или вам говорят, что вам это запрещено по каким-либо причинам)?
-y 0
полностью удаляет заголовки, хотя это может быть не задокументировано
В sqlcmd явно указано, что использование параметров -h
и -y
являются взаимоисключающими, @siggemannen: Sqlcmd: The -h and the -y 0 options are mutually exclusive.
Как ни странно, в sqlcmd-go он не генерирует указанную ошибку (он просто не возвращает заголовки).
@ThomA Я знал, что ADS существует, но не знаю о его поддержке Linux.
@siggemannen У меня есть сторонний инструмент для чтения XML плана выполнения.
«но я не знаю о поддержке Linux». Как я уже говорил, он поддерживается в Linux (так что теперь вы знаете). Я запускал его в Linux с тех пор, как он назывался «SQL Operations Studio» (и мне бы хотелось, чтобы он все еще назывался так, сброс «Azure» в начале имени был глупостью Microsoft...). Он разработан с учетом кросс-платформенной совместимости. Единственная платформа, которую он не поддерживает (пока), — это ARM64 в Linux; не знаю, почему для этого нет сборки (пока), поскольку такие сборки есть и у Windows, и у Apple.
@ThomA Спасибо. Я посмотрю. Это все еще отстой по сравнению с SSMS? Я слышал, что Кендра Литтл очень много работала над его улучшением.
Почему бы не попробовать и посмотреть, насколько он вам понравится по сравнению с emacs? Честно говоря, большинство вещей лучше, чем SSMS, единственная сила — в функциональной поддержке, а не в стиле графического интерфейса.
За последние годы он прошел долгий путь. Кендра усердно работала над добавлением множества новых функций, некоторые из которых также не появятся в SSMS. Это разные инструменты, о которых люди, похоже, забывают; То, что Microsoft поначалу назвала ADS «заменой Linux SSMS», является одной из причин, почему изначально она была так плохо принята, хотя на самом деле это не так. Я признаю, что в SSMS есть функции, которые мне хотелось бы иметь в ADS, но на самом деле есть некоторые функции ADS, которые мне бы хотелось, чтобы SSMS тоже время от времени поддерживала. Это «качели и карусели». Я с удовольствием использую оба и наслаждаюсь этим опытом уже пару лет.
Но отклоняемся от темы для Stack Overflow . Хотя это могла бы быть хорошая дискуссия.
Не знаю, есть ли какая-либо документация по этому поводу, но недавно я имел удовольствие прочитать исходный код 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. Вы уверены, что это применимо?
Предполагается, что это функциональный эквивалент, и у меня нет под рукой кода «реальной» версии.
И ты не сможешь, @siggemannen. Версия, отличная от Go, не имеет открытого исходного кода.
Разве Azure Data Studio не поддерживает Linux?