Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
можно ли как-то получить список всех таблиц и полей, используемые во всех процедурах данной базы?
или это проще сделать не на T-SQL?
23 янв 12, 18:20    [11955117]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
zviad
можно ли как-то получить список всех таблиц и полей, используемые во всех процедурах данной базы?
или это проще сделать не на T-SQL?
]
Прощще на powershell. Копать отсюда: Microsoft.SqlServer.Management.Smo <rus>
23 янв 12, 18:42    [11955303]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
zviad,

всех невозможно в принципе
23 янв 12, 18:48    [11955352]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
имелось в виду не все то, что использует сервер, выполняя процедуры,
а вычленить из кода всех процедур имена таблиц с используемыми полями.
т.е. отлично подойдет и просто звезду вычленить,
если за ней идет FROM,
потом я звезды позаменяю полным списком полей.
даже отлично пойдет вычленить просто все SELECT...FROM,
но они же могут быть вложенные, никак не соображу, как их вычленять
23 янв 12, 18:57    [11955409]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
zviad,

ну попробуйте вычленить хоть что нибудь из следующего куска кода:)

declare @s varchar(1000)
set @s = 'select ' 
set @s = @s + 'col'
set @s = @s + 'umn'
set @s = @s + '5'
set @s = @s + ' from '
set @s = @s + 'tab'
set @s = @s + 'el5' 

exec (@s)
23 янв 12, 19:05    [11955466]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
WarAnt,

ужасно.
да, есть там и динамическое добро
ну а хотя бы из нединамического кода как-то можно выцепить?
23 янв 12, 19:09    [11955505]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
zviad,

тока парсить текст кода и анализировать, можно парсить трассу профайлера кому что больше нравится
23 янв 12, 19:11    [11955517]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
трассу не надо.
тексты всех процедур вроде получаю:
select m.object_id, m.definition 
from sys.sql_modules m join sys.objects o on m.object_id = o.object_id
where type = 'P'


а толку-то. как парсить, если селекты могут быть вложенные?
23 янв 12, 19:29    [11955619]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
zviad
ну а хотя бы из нединамического кода как-то можно выцепить?
В приближении легко сделать без распарсивания.

Но туда будут попадать и, например, имена таблиц в комментариях, просто похожие слова...

select p.name as proc_name, t.name as table_name
from sys.procedures p
	join sys.tables t
		on object_definition(p.object_id) like '%' + t.name + '%'
order by proc_name, table_name
23 янв 12, 19:32    [11955642]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
alexeyvg,

огромное спасибо.
как раз как первое приближение сойдет отлично.
по крайней мере ничего не теряется, а как отсеить лишнее подумаю
23 янв 12, 19:48    [11955744]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
zviad
ну а хотя бы из нединамического кода как-то можно выцепить?

Так тебе из кода надо? - SQL Assistant неплохо находит в коде ссылки. Впринцыпе, простым поиском по тексту, можно найти.
23 янв 12, 21:48    [11956442]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
продолжение истории.
наконец получена таблица в 2 колонки:
имя процедуры и имя использованной в ней таблицы (1..n).
можно ли как-то перед каждым используемым в процедуре полем дописать имя соответствующей таблицы?
чего-то мне снова кажется, что это надо не на T-SQL писать.
добавить список столбцов к исходной таблице ничего не стоит,
но ведь в процедуре могут оказаться поля с одинаковым именем из разных таблиц...
24 янв 12, 15:44    [11961384]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
zviad
можно ли как-то перед каждым используемым в процедуре полем дописать имя соответствующей таблицы?

SQL Assistant :-) Хотя всёравно надо аккуратно, он иногда глючит, так что проверять лучше.
24 янв 12, 16:12    [11961761]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
zviad
можно ли как-то перед каждым используемым в процедуре полем дописать имя соответствующей таблицы?
В смысле, автоматически? Нельзя, конечно.

Вообще странное желание, автоматически править код программы...
24 янв 12, 16:14    [11961789]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
ZOOKABAKODER
zviad
можно ли как-то перед каждым используемым в процедуре полем дописать имя соответствующей таблицы?

SQL Assistant :-) Хотя всёравно надо аккуратно, он иногда глючит, так что проверять лучше.
И он умеет определять, к какой таблице относится поле, и сам дописывает? Круто.

Вообще конечно нужно использовать алиасы в коде. Такого уровня код нужно рефакторить.
24 янв 12, 16:15    [11961806]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
Glory
Member

Откуда:
Сообщений: 104751
zviad
но ведь в процедуре могут оказаться поля с одинаковым именем из разных таблиц...

Мало того, можно любому полю в запросе назначить произвольный псевдоним
24 янв 12, 16:15    [11961808]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
ZOOKABAKODER,
и при чем это тут???
в написанных уже процедурах, где перед именем столбца нет имени таблицы, надо его вписать.
спрашивается, чем это парсить
24 янв 12, 16:17    [11961823]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
zviad,

Если без динамического SQL, то может быть это поможет?

SELECT OBJECT_NAME(D.object_id) AS [Object], OBJECT_NAME(D.referenced_major_id) AS [Referenced Object], COL.name AS [Referenced_Columnm] FROM sys.sql_dependencies AS D 
OUTER APPLY (SELECT C.name FROM sys.all_columns AS C WHERE C.object_id = D.referenced_major_id
AND C.column_id = D.referenced_minor_id) AS COL
ORDER BY 1,2,3
24 янв 12, 17:35    [11962690]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
Glory
zviad
но ведь в процедуре могут оказаться поля с одинаковым именем из разных таблиц...

Мало того, можно любому полю в запросе назначить произвольный псевдоним



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

to Jovanny
спасибо, попробую прикрутить sys.sql_dependencies.
24 янв 12, 18:03    [11963001]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
alexeyvg
И он умеет определять, к какой таблице относится поле, и сам дописывает? Круто.

Он и alias таблице приписывает, если нет, и полям в запросе. Но в 5-й версии он порой ошибался. В 6-й я не тестировал ещё.
Я такие вещи обычно руками делаю, с помощью автозаполнения SQL Assist'а.
24 янв 12, 18:19    [11963107]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
zviad
когда только можно было избежать алиасов, их не давали.
Прикольно :-)

Схемы заодно проверьте, раз уж разгребаете - может, их тоже на всякий случай "не давали"...
24 янв 12, 18:23    [11963124]     Ответить | Цитировать Сообщить модератору
 Re: получить список всех таблиц и полей всех процедур в БД  [new]
zviad
Guest
тут еще проще: кроме dbo используется всего 1 схема -- моя :)
а все, что надо править, написано ДО МЕНЯ
так что выбора и не было
24 янв 12, 20:05    [11963754]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить