我需要更改列的数据类型,但我并不是数据库中可能引用它的每个位置。是否有脚本或应用程序可以搜索数据库中的所有视图,存储过程,函数,表计算列等,并显示引用该列的内容?我使用的是SQL Server 2005 Standard。
谢谢, 亚伦
答案 0 :(得分: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查询窗口并执行。
警告提示:如果正在引用任何列 - 在外键关系中,或者对它们存在默认或检查约束 - 此方法可能会失败。在这种情况下,您需要为这些列执行一些额外的步骤(例如首先删除约束等)。
更新:搜索表格中定义的列。
如果您需要搜索存储过程,查看和功能,我强烈建议使用Red-Gate的优秀且免费(!!)SQL Search实用程序 - 非常棒!
答案 1 :(得分:2)
我喜欢使用redgate软件的免费搜索加载项工具。我很惊讶它有多么有用 - 你可以用它快速找到对文本的所有引用。
此描述来自SQL Curry:
SQL搜索在存储过程,函数,视图等中查找SQL文本的片段,一旦找到它们,它就可以快速允许您单击并跳转到对象,无论它们位于服务器上的哪个位置。这很酷!
以下是链接:SQL Search
答案 2 :(得分: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>'
答案 3 :(得分:0)
我为Red Gate工作,我看到已经提到过SQL Search。很高兴,对你有用。另一个可以专门列出列依赖关系的工具是SQL Prompt 5,即将发布。您可以访问:http://www.surveymk.com/s.aspx?sm=zDJogAY5rwdIwOX/SqtTCQ%3d%3d并加入早期访问列表来下载EA版本。我欢迎您试一试,如果不符合您的要求,请告诉我。它具有的另一个重要功能是能够列出无效对象。换句话说,如果重命名一个列并且您有一个引用旧列的存储过程,它会引起您的注意。