Information_schema.columns в запросе - PullRequest
       23

Information_schema.columns в запросе

0 голосов
/ 02 октября 2018

Мне нужно извлечь данные из пользовательских столбцов во всех таблицах, в которых есть столбцы «custom1, custom2, custom3 .....».

Declare @TableName varchar(max)
set @TableName = 'RandomTable';

with main as 
(
     select distinct 
         infos.COLUMN_NAME, infos.TABLE_NAME
     from 
         INFORMATION_SCHEMA.COLUMNS infos
     where 
         infos.TABLE_NAME = @TableName
         and infos.COLUMN_NAME like 'Custom%%'
)

Этот запрос возвращает список пользовательских столбцов в любомтаблицу я указываю в параметре.Любая идея, как использовать это в запросе, чтобы я мог получить все данные из столбцов RandomTable.Custom%%?

Есть идеи?Я теряю сюжет на этом.

1 Ответ

0 голосов
/ 03 октября 2018

Следуя идее неуместности и предполагая, что вы используете SQL Server, вы можете сделать что-то вроде этого:

DECLARE 
  @TableName VARCHAR(MAX)
 ,@ColumnName VARCHAR(MAX)
 ,@SQLQuery VARCHAR(MAX)
 ,@FirstFlag BIT
SET @TableName = 'TEST'

SELECT
  COL.COLUMN_NAME
INTO ##CUSTOM_COL
FROM INFORMATION_SCHEMA.COLUMNS COL
WHERE 1 = 1
 AND COLUMN_NAME LIKE 'CUSTOM__'
 AND TABLE_NAME = @TableName

DECLARE CUR_CUSTOM_COL CURSOR FOR
SELECT * FROM ##CUSTOM_COL

OPEN CUR_CUSTOM_COL  
FETCH NEXT FROM CUR_CUSTOM_COL INTO @ColumnName  

SET @FirstFlag = 1
SET @SQLQuery = 'SELECT *'

WHILE @@FETCH_STATUS = 0  
BEGIN
  IF @FirstFlag = 0
  BEGIN
    SET @SQLQuery = @SQLQuery + ', '
  END

  SET @SQLQuery = @SQLQuery + @ColumnName 

  SET @FirstFlag = 0
  FETCH NEXT FROM CUR_CUSTOM_COL INTO @ColumnName
END 

CLOSE CUR_CUSTOM_COL  
DEALLOCATE CUR_CUSTOM_COL

SET @SQLQuery = @SQLQuery + ' FROM ' + @TableName
EXEC(@SQLQuery)

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

...