Преобразование каждого столбца записи в отдельную запись

У меня есть запись:

DECLARE @Tbl AS TABLE(Col1 VARCHAR(10), Col2 VARCHAR(10), Col3 VARCHAR(10)); INSERT INTO @Tbl VALUES('Val1', 'Val2', 'Val3') -- Source Record SELECT Col1, Col2, Col3 FROM @Tbl 

Результат: Val1 Val2 Val3

Я хочу результат каждого столбца, так как отдельные записи столбцов, такие как первый столбец, станут заголовком исходного столбца, а второй столбец должен быть значением столбца источника, как результат ниже запроса, в котором я достиг результата с помощью UNION ALL :

 --Query for Target Result SELECT 'Col1' AttributeTitle, CONVERT(VARCHAR, Col1) AttributeValue FROM @Tbl UNION ALL SELECT 'Col2' AttributeTitle, CONVERT(VARCHAR, Col2) AttributeValue FROM @Tbl UNION ALL SELECT 'Col3' AttributeTitle, CONVERT(VARCHAR, Col3) AttributeValue FROM @Tbl 

Проблема в этом вопросе заключается в том, что я должен явно определять столбцы, есть ли способ, чтобы он динамически получал имена столбцов и их значения?

Вы можете использовать UNPIVOT но вам все равно нужно знать имена столбцов.

 SELECT ColumnName, ValueName FROM (SELECT * FROM @Tbl) AS Data UNPIVOT ( ValueName FOR ColumnName IN (Col1, Col2, Col3) ) AS PivottedOutput 

Мне нравится метод apply для univoting в SQL Server:

 select v.* from @tbl t cross apply (values ('col1', col1), ('col2', col2), ('col3', col3) ) v(AttributeTitle, AttributeValue); 

Это упрощает запрос, но прямо не отвечает на вопрос.

Если вы хотите переменное количество столбцов, вам придется использовать динамический SQL. Это немного громоздко на реальном столе. Однако с табличной переменной или временной таблицей у вас есть дополнительная проблема с правилами определения области видимости – имя таблицы не будет в области действия при выполнении инструкции.

  • sql cross join - какое использование кому-либо удалось найти?
  • Как настроить базу данных на SQL Server неизвестным файлом?
  • «SqlParameterCollection принимает только ненулевые объекты типа SqlParameter, а не объекты String"
  • T-SQL для отображения всех пользовательских сопоставлений с ролями / разрешениями базы данных для входа в систему
  • Проблемы с мастером миграции SQL Azure
  • Проблемы преобразования символа в datetime
  • Продолжение - просмотр FIRST_ROWS до завершения запроса
  • Использование имени базы данных в скрипте sql для полного имени таблицы
  • Заблокировано из SQL Server из-за запуска
  • Microsoft SQL Server Management Studio - попытка добавить ограничение FK, получив ошибку: «Недопустимый столбец ...»
  • Неверные строки, возвращаемые из запроса пользователя
  • Interesting Posts

    Найдите символы верхнего регистра в поле базы данных SQL Server

    Сколько стоит сеть – определение сетевых издержек в SQL Server

    Безопасный SQL Server, доступ к которому осуществляется с помощью жирного клиента

    Как я могу сделать новые поля доступными дизайнеру отчетов?

    C # Расшифровывать байты из SQL Server EncryptByPassPhrase?

    Проблема с порядком по FOR XML в T-sql (предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах)

    Db Connection простой файл, не помню расширение

    Ошибка конверсии при преобразовании значения varchar 'Oct' в тип данных int

    SQL-сервер DATEADD в определенные дни недели

    tsql, чтобы найти таблицы, которые не используются хранимыми процедурами, представлениями, функциями и т. д.?

    серверный запрос sql server

    Инструмент для преобразования T-SQL в графическую модель?

    Как переименовать базу данных и файлы с инфраструктурой сущностей

    SQL Query для разделения строк на строки и столбцы

    Как найти символы в верхнем регистре в строке и заменить их пробелом с помощью SQL или SSRS

    Давайте будем гением компьютера.