Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вывести значения всех колонок по всем таблицам заданной схемы  [new]
полный_ламер
Member

Откуда:
Сообщений: 3
Привет. Знаю сразу, что вопрос ламерский, ну по логину видно. Подскажите, как вывести значения всех колонок по всем таблицам заданной схемы. По поводу производительности такого запроса всё понятно, ну долго будет выполняться, если не вечно (зависит от размера базы). Подскажите по возможности, пожалуйста.
6 фев 14, 00:51    [15525816]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Как-то так:
exec sys.sp_MSforeachtable 'if object_schema_name(''?'') = ''abc'' select * from ?;';
6 фев 14, 05:42    [15525984]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
полный_ламер
Member

Откуда:
Сообщений: 3
Ennor Tiegael, спасибо.

А вот еще вариант, осталось еще понять как отфильтровать по нужному значению колонки column_value



типа ... where column_value like '%acc%'

Есть идеи?


DECLARE @strQry1 varchar(max)
DECLARE @strQry2 varchar(max)
DECLARE @rowCount bigint
SET @rowCount = (
SELECT COUNT('X')
FROM 
sys.all_columns c
LEFT JOIN
sys.all_objects o 
on
c.object_id=o.object_id
left join 
sys.schemas s
on s.schema_id=o.schema_id
where o.type='u'
)
DECLARE @tempTable TABLE (
ID BIGINT IDENTITY(1,1),
strQry varchar(max))
INSERT INTO @tempTable (strQry)
SELECT ' Union All ' + 'Select ''' + s.name + ''' as [schema_name], '''+ o.name+' '' as table_name, ''' +c.name +''' as column_name, Convert(varchar,' +c.name +') as column_value from '+s.name +'.'+ o.name as qry
FROM 
sys.all_columns c
LEFT JOIN
sys.all_objects o 
on
c.object_id=o.object_id
left join 
sys.schemas s
on s.schema_id=o.schema_id
where o.type='u'
--SELECT * FROM @tempTable
SET @strQry1 =(select STUFF((SELECT strQry
FROM 
@tempTable
where ID < (SELECT @rowCount/2 )


FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,11,'') strQry)

SET @strQry2 =(select STUFF((SELECT strQry
FROM 
@tempTable
where ID >= (SELECT @rowCount/2 )


FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,11,'') strQry)

PRINT (@strQry1 + ' UNION ALL ' + @strQry2)
EXEC (@strQry2 + ' UNION ALL ' + @strQry2)
6 фев 14, 16:21    [15529733]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
Glory
Member

Откуда:
Сообщений: 104751
полный_ламер
Есть идеи?

Придется в цикле для каждой таблицы
- лезть в метаданные за списком полей
- на основе метаданных составлять динамический запрос
- выполнять запрос и помещать результат куда нибудь
6 фев 14, 16:31    [15529837]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
o-o
Guest
по-моему, ТС хочет найти все таблицы,
где есть колонка с заданным именем.
так вот взять и пройтись просто по sys.columns, не?
у него в скрипте под column_value совсем не value подразумеваeтся...
6 фев 14, 16:46    [15529943]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
по-моему, ТС хочет найти все таблицы,

" как вывести значения всех колонок по всем таблицам заданной схемы"
6 фев 14, 16:47    [15529947]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
o-o
Guest
да, извиняюсь.
ну тогда так, наверное:
DECLARE @strQry1 varchar(max)
DECLARE @strQry2 varchar(max)
DECLARE @rowCount bigint
SET @rowCount = (
SELECT COUNT('X')
FROM 
sys.all_columns c
LEFT JOIN
sys.all_objects o 
on
c.object_id=o.object_id
left join 
sys.schemas s
on s.schema_id=o.schema_id
where o.type='u'
)
DECLARE @tempTable TABLE (
ID BIGINT IDENTITY(1,1),
strQry varchar(max))
INSERT INTO @tempTable (strQry)
SELECT ' Union All ' + 'Select ''' + s.name + ''' as [schema_name], '''+ o.name+' '' as table_name, ''' +c.name +''' as column_name, Convert(varchar,' +c.name +') as column_value from '+s.name +'.'+ o.name 
+ ' where Convert(varchar,' +c.name +') like ''%acc%''' as qry
FROM 
sys.all_columns c
LEFT JOIN
sys.all_objects o 
on
c.object_id=o.object_id
left join 
sys.schemas s
on s.schema_id=o.schema_id
where o.type='u'
--SELECT * FROM @tempTable
SET @strQry1 =(select STUFF((SELECT strQry
FROM 
@tempTable
where ID < (SELECT @rowCount/2 )


FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,11,'') strQry)

SET @strQry2 =(select STUFF((SELECT strQry
FROM 
@tempTable
where ID >= (SELECT @rowCount/2 )


FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),1,11,'') strQry)

PRINT (@strQry1 + ' UNION ALL ' + @strQry2)
EXEC (@strQry2 + ' UNION ALL ' + @strQry2)


(если считать, что скрипт вообще правильный)
6 фев 14, 17:40    [15530243]     Ответить | Цитировать Сообщить модератору
 Re: вывести значения всех колонок по всем таблицам заданной схемы  [new]
полный_ламер
Member

Откуда:
Сообщений: 3
o-o,

низкий поклон!
спасибо, всё работает.
6 фев 14, 17:54    [15530326]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить