在整个SQL数据库中搜索列

Aar*_*ron 0 sql-server

我需要更改列的数据类型,但我不是数据库中可能引用它的每个位置.是否有脚本或应用程序可以搜索数据库中的所有视图,存储过程,函数,表计算列等,并显示引用该列的内容?我使用的是SQL Server 2005 Standard.

谢谢你,亚伦

mar*_*c_s 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'
Run Code Online (Sandbox Code Playgroud)

并根据该信息,您可以为数据库生成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'
Run Code Online (Sandbox Code Playgroud)

此查询生成一组ALTER TABLE ....语句,然后您可以将这些语句复制到SSMS查询窗口并执行.

警告的话:如果引用了任何列 - 在外键关系中,或者对它们有默认或检查约束 - 这种方法可能会失败.在这种情况下,您需要为这些列执行一些额外的步骤(例如首先删除约束等)

更新:这将搜索表中定义的列.

如果你需要搜索存储过程,视图和函数,我强烈建议使用Red-Gate的优秀和免费(!!)SQL搜索实用程序 - 优秀的东西!