t-sql манипуляции со строками и столбцами таблицы - PullRequest
1 голос
/ 19 июня 2010

Таблица DETAILS имеет следующие столбцы

Title  First  Second  Third  Fourth Fifth
------------------------------------------
A      null    null   null    null    null


input variable
--------------

@columns = 'Title, Third, Fourth'

Я хочу сгенерировать вывод как

@allcolumns = 'Title, Third, Fourth, First, Second, Fifth'

Переменная @allcolumns будет содержать все столбцы из таблицы DETAILS, но сначала с @columns, а затемостальные столбцы

Так, например, если

@columns = 'Title, Fourth,Fifth' 

, то результат будет

@allcolumns = 'Title, Fourth, Fifth, First, Second, Third'

Спасибо

Ответы [ 3 ]

3 голосов
/ 19 июня 2010

Это должно работать:

DECLARE @columns VARCHAR(max);
DECLARE @allcolumns VARCHAR(max);

SET @columns = 'Title,Fourth,Fifth';
SET @allcolumns = @columns;

SELECT @allcolumns = @allcolumns + ',' + column_name FROM
    INFORMATION_SCHEMA.columns WHERE
    table_name = 'DETAILS' AND
    CHARINDEX(column_name, @columns) = 0;

SELECT @allcolumns;

GO

Дополнительная мысль: если вы хотите создать инструкцию SELECT для выбора столбцов в порядке, сгенерированном приведенным выше кодом, вы можете сделать это:

DECLARE @sql VARCHAR(max);
SET @sql = 'SELECT ' + @allcolumns + ' FROM DETAILS';
EXEC(@sql);

... хотя я не понимаю, почему вы хотели бы это сделать.

0 голосов
/ 19 июня 2010

Во-первых, и самое главное, почему бы просто не вернуть столбцы с Первого по Пятый и позволить вызывающему коду определить, какие столбцы использовать?Язык SQL в целом не был предназначен для динамического определения и генерации столбцов.Предполагается, что вызывающий код обрабатывает определение столбцов, которые должны быть возвращены.Кроме того, вызывающий код не должен никогда зависеть от порядка столбцов в запросе, и поэтому порядок столбцов в выходных данных не должен иметь значения.Учитывая это, вы должны выполнять этот тип манипуляции в компоненте среднего уровня или в инструменте отчетности.

Во-вторых, хотя возможно решить эту проблему в T-SQL, этого делать не следует.T-SQL ужасен для работы со строками.

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

0 голосов
/ 19 июня 2010

Есть много способов сделать это.Поскольку ваш вопрос носит довольно общий характер, я бы посоветовал взглянуть на следующую ссылку и использовать ваши представления INFORMATION_SCHEMA при использовании SQL Server.конкатенации-строки-значения-в-Transact-SQL /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...