2010-11-17 4 views
0

Мне нужно изменить тип данных столбца, но я не все места в базе данных, которые могут ссылаться на него. Есть ли сценарий или приложение, которое может искать все представления, хранимые процедуры, функции, столбцы, подсчитанные таблицами и т. Д. В базе данных, и показывать, что ссылается на столбец? Я использую SQL Server 2005 Standard.Поиск столбца во всей базе данных SQL

Спасибо, Аарон

+0

С какими типами данных вы переходите от и до? –

+0

Одна проблема: даже если у вас был такой скрипт, он не сможет охватить любые динамические операторы SQL (EXEC) или ad-hoc SQL, которые могут быть созданы вашим приложением. – JohnFx

+0

Я немного перехожу к varchar (1). – Aaron

ответ

5

Вы всегда можете проверить вид sys.columns каталога:

SELECT 
    c.NAME 'Col Name', 
    OBJECT_NAME(c.OBJECT_ID) 'Table Name', 
    t.name 
FROM 
    sys.columns c 
INNER JOIN 
    sys.types t ON c.system_type_id = t.system_type_id 
WHERE 
    c.Name = 'your-column-name-here' 

и на основе этой информации, вы можете генерировать операторы ALTER для базы данных:

SELECT 
    'ALTER TABLE dbo.' + OBJECT_NAME(c.OBJECT_ID) + 
    ' ALTER COLUMN ' + c.NAME ' NewDataType NULL' 
FROM 
    sys.columns c 
WHERE 
    c.Name = 'your-column-name-here' 

Этот запрос генерирует набор операторов ALTER TABLE ...., которые затем можно скопировать в окно запроса SSMS и ex ecute.

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

Обновление: это ищет столбцы, как определено в таблицах.

Если вам нужно искать в хранимые процедуры, представления и функции, а также, я бы настоятельно рекомендовал использовать Red-Gate отличными и бесплатно (!!) SQL Search утилита - отличный материал!

+0

Спасибо за ваш быстрый ответ.Но выполняет ли этот поиск хранимые процедуры и определенные пользователем функции? – Aaron

+0

Нет, он ищет столбцы, как они определены в таблицах. –

+0

ОК, утилита Red-Gate - именно то, что мне нужно. Благодарю. – Aaron

0

Этот запрос поможет найти столбец любой таблицы и столбца, на который указывает -

SELECT OBJECT_NAME(f.parent_object_id) AS [Table], COL_NAME(fc.parent_object_id,fc.parent_column_id) AS [Column], 
OBJECT_NAME (f.referenced_object_id) AS RefTable,  COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS RefColumn, 
f.name AS FK 

FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc 
ON f.OBJECT_ID = fc.constraint_object_id 

WHERE OBJECT_NAME(f.parent_object_id) = '<your table name>' 
AND COL_NAME(fc.parent_object_id,fc.parent_column_id) = '<your column name>' 
2

Мне нравится использовать бесплатный поиск добавить в инструмент из RedGate программного обеспечения. Я поражен, насколько он полезен - вы можете быстро найти все ссылки на текст.

Это описание из SQL Карри:

SQL Search находит фрагменты SQL текста в хранимых процедур, функций, представлений и больше, и как только вы их найдете, это позволяет быстро нажать и перейти к объектам, где бы они ни находились на ваших серверах. Это круто!

Вот ссылка: SQL Search

0

Я работаю Красных ворот, и я вижу, что SQL Search, как уже упоминалось. Рад, что это работает для вас. Еще один инструмент, который может специально указывать зависимости столбцов, - это SQL Prompt 5, который вскоре будет выпущен. Вы можете загрузить сборку EA, посетив: http://www.surveymk.com/s.aspx?sm=zDJogAY5rwdIwOX/SqtTCQ%3d%3d и присоединившись к раннему списку доступа. Я бы рад, что вы попробуете это и дайте мне знать, если это не соответствует вашим требованиям. Еще одна отличная функция - возможность перечислить ваши недопустимые объекты. Другими словами, если вы переименуете столбец и у вас есть хранимая процедура, которая ссылается на старый столбец, это привлечет ваше внимание к этому.