2016-09-21 7 views
0

Есть ли способ сделать это с помощью t-sql без использования курсора или цикла или временных таблиц? Может быть, используя динамический sql?Найти значение из определенных столбцов во всех таблицах в базе данных - динамический sql?

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

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

Итак, в приведенном ниже примере (нерабочем) мне нужно найти способ цикла через syscolumns и использовать все значения для @tabname и @colname. Есть ли способ сделать это?

declare @tabname sysname; 
declare @colname sysname; 

SELECT 
name         as [column name], 
object_NAME(id)       as [table name], 
(select max(@colname) from @tabname) as [max col value] 
from syscolumns    
where colorder = 1 

Любая помощь или советы оценены.

С уважением, Дейв.

+0

Какое странное требование. Какое фактическое использование может обеспечить это? Чтобы получить максимальное значение из первого столбца в каждой таблице, потребуется динамический sql. Ответ, предложенный Kannan ниже, отлично справляется с получением имен столбцов. Вам нужно будет расширить это с помощью динамического sql, чтобы получить ваши значения. –

+0

Спасибо Шон. Да, требования других народов всегда очень странны, когда они показаны вне контекста на форуме, подобном этому. К сожалению, я не могу подробно остановиться на контексте из соображений безопасности. У меня есть все имена столбцов и имена таблиц, используя мой очень простой начальный запрос syscolumns, где colorder = 1 (см. Его в ответе, который я дал Kannan.) – davehants

ответ

0

Вы можете использовать запрос, как этот

;WITH cte 
AS (SELECT 
    object_id, 
    MIN(column_id) mincolumnid 
FROM sys.columns 
GROUP BY object_id) 
SELECT 
    t.name, 
    c.name 
FROM sys.tables t 
INNER JOIN sys.columns c 
    ON t.object_id = c.object_id 
INNER JOIN cte ct 
    ON c.object_id = ct.object_id 
    AND c.column_id = ct.mincolumnid 
+0

Это получает имена колонок, но не значения как состояния OP. –

+0

Ой, да. Я неправильно понял вопрос и подумал, что мне нужно получить только имена столбцов. Как вы уже упоминали, это будет странное требование, которое нам может потребоваться, чтобы пройти через все таблицы, чтобы получить значения. –

+0

Да. Ваш запрос является отличной отправной точкой для динамического sql. –