2016-07-13 3 views
0

Мне нужно указать все имена столбцов DISTINCT для списка таблиц в сводном формате. Мне нужны заголовки столбцов, чтобы быть фактическими именами столбцов, чтобы я мог видеть, в каких таблицах отсутствует столбец.Список всех столбцов в таблицах SQL Server

В примере ниже, используя первые 2 таблицы, ChnlngAssess_PTR должен иметь столбец вопросов (столбец 6) в виде пробела.

table_name  RespID LTID UserID ProjectID QuestionAttempt QType Question 
---------------------------------------------------------------------------------------- 
ARTWBT_PTR  RespID LTID UserID ProjectID QuestionAttempt QType Question 
ChlngAssess_PTR RespID LTID UserID ProjectID     QType Question 
+0

Все ли ваши таблицы имеют одинаковые столбцы, за исключением некоторых таблиц, отсутствующих в некоторых столбцах? Сколько таблиц вы пытаетесь сравнить? – scsimon

+0

Это не имеет большого значения для меня. Вероятно, вы можете использовать динамический стержень, но совсем не ясно, как вы знаете, какие столбцы должны быть включены. Нам нужно немного больше объяснять, что вы пытаетесь сделать. –

+0

Благодарим за отзыв. В именах столбцов 74 DISTINCT содержится 34 таблицы. Результаты будут отображать имя таблицы в первом столбце и 74 столбца в других столбцах. Если в таблице нет столбца, значение будет пустым. – Bill

ответ

2

Заменить AdventureWorksDW2012 с тем, что когда-либо ваше имя БД, и если вы хотите ограничить таблицы, поставить условие WHERE в первом выбрать на t.TABLE_NAME

IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL DROP TABLE #tempTable 

SELECT 
    t.TABLE_NAME, 
    c.COLUMN_NAME 
INTO #tempTable 
FROM 
    AdventureWorksDW2012.INFORMATION_SCHEMA.TABLES t 
    inner join 
    AdventureWorksDW2012.INFORMATION_SCHEMA.COLUMNS c on c.TABLE_NAME = t.TABLE_NAME 


DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnName AS NVARCHAR(MAX) 


SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
     + QUOTENAME(COLUMN_NAME) 
FROM (SELECT DISTINCT COLUMN_NAME FROM #tempTable) AS COLUMN_NAME 


SET @DynamicPivotQuery = 
    N'SELECT TABLE_NAME, ' + @ColumnName + ' 
    FROM #tempTable 
    PIVOT(Max(COLUMN_NAME) 
      FOR COLUMN_NAME IN (' + @ColumnName + ')) AS PVTTable' 

EXEC sp_executesql @DynamicPivotQuery 
+0

Работает как очарование! Я царапал лысину, пытаясь заставить ее работать. – Bill

+0

Рад это услышать @Bill. Не забудьте принять ответ, если это именно то, что вы хотите. Хорошей охоты. – scsimon

0

Найдет все имена полей во всех таблицах в вашей БД.

SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
ORDER BY schema_name, table_name; 
Смежные вопросы