Какой синтаксис для этого? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу получить набор столбцов из временной таблицы в виде строки. Следующее:

 select name from tempdb.sys.columns where object_id = object_id('tempdb..##myTempTable')

дает что-то вроде

|name|
------
Col1
Col2
Col3
Col4
...

Могу ли я повернуть это, чтобы получить col1 | Col2 | Col3 | Col4 | ...? В столбцах, НЕ как одно значение.

Я не буду знать названия столбцов раньше времени.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Не существует единого синтаксиса, который будет таким образом поворачивать эти данные.

Язык SQL (для любой базы данных) имеет твердое требование , чтобы вы знали число и тип каждого столбца в результатах во время компиляции запроса . Это необходимо для того, чтобы ядро ​​базы данных определяло правильные разрешения и вычисляло план выполнения. Даже SELECT * запросы удовлетворяют этому требованию, так как количество и типы столбцов в таблицах, используемых запросом, являются фиксированными и известными (по крайней мере, в течение жизни одного запроса).

То, что этот вопрос просит сделать, нарушает это требование. Заголовки столбцов определяются данными, и, следовательно, ядро ​​базы данных не может знать, сколько столбцов ему нужно для результатов, пока после запрос не начнет выполняться.

Единственный способ обойти это - разбить запрос на три отдельных шага:

  1. Выполните более простой запрос, чтобы определить заголовки столбцов для окончательных результатов.
  2. Использование результатов # 1 для создания новой строки SQL на лету
  3. Выполните запрос из # 2 и верните его результаты пользователю.
0 голосов
/ 10 мая 2018
 declare @cols varchar(max)=''
 declare @query varchar(max)
 select @cols=''''+name+''','+@cols from tempdb.sys.columns 
 where object_id = object_id('tempdb..##myTempTable')

 select @cols=left(@cols,len(@cols)-1)

set @query= 'select ' + @cols 

execute(@query)

Если вам нужен столбец с именем, измените эту строку

 select @cols=''''+name+''''+ name  +','+@cols from  sys.columns 
  where object_id = object_id('hrc.dbo.car')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...