在 SQL Server 存储过程中查找表名的列名作为保留关键字

Posted

技术标签:

【中文标题】在 SQL Server 存储过程中查找表名的列名作为保留关键字【英文标题】:Find ColumnNames or TableNames as reserved keyword in SQL Server stored procedure 【发布时间】:2016-07-05 12:47:41 【问题描述】:

我的数据库中有大量存储过程。所有这些都旨在返回结果集。我遵循命名标准,所有关键字都是 UPPERCASE 因此,如果在任何 SELECT 语句中将任何列名或表名作为保留关键字,那么这将是 UPPERCASE。

我想将这些大写关键字转换为驼峰式。

例如我的一个实际存储过程:

CREATE PROCEDURE prc_getresults
AS
BEGIN
    SELECT ZD.Id
        ,ZD.NAME
        ,ZD.TIMESTAMP
        ,ZD.CreatedBy
    FROM ZoneDetails ZD
    INNER JOIN ZONE Z ON Z.Id = ZD.ZoneId
END

转换后我的预期代码是

CREATE PROCEDURE prc_getresults
AS
BEGIN
    SELECT ZD.Id
        ,ZD.Name
        ,ZD.TimeStamp
        ,ZD.CreatedBy
    FROM ZoneDetails ZD
    INNER JOIN Zone Z ON Z.Id = ZD.ZoneId
END

这里请看列名TimeStampName和表Zone

大约有 700 多个存储过程。我无法打开每个代码并手动编辑它们。

请提供任何想法,以更好地对数据库中的所有存储过程实施这些更改。

【问题讨论】:

您需要第三方工具来执行此操作。我最喜欢的格式化程序dpriver.com/dlaction.php 【参考方案1】:

您可以根据需要扩展以下查询,

SELECT DISTINCT
       o.name AS Object_Name,
       o.type_desc
  FROM sys.sql_modules m
       INNER JOIN
       sys.objects o
         ON m.object_id = o.object_id
 WHERE m.definition In ( '%\[TimeStamp\]%', '%\[Name\]%', '%\[Zone\]%');

【讨论】:

我已经举了一个例子,但实际上我必须检查所有的关键字...... 使用 T-SQL 无法做到这一点【参考方案2】:

你最好下载这个神奇的免费工具 - http://www.red-gate.com/products/sql-development/sql-search/ - sql server的Red-date搜索。

然后你必须做一些工作来找到保留字 - https://msdn.microsoft.com/en-us/library/ms189822.aspx

该工具让您可以很好地了解事物。

【讨论】:

以上是关于在 SQL Server 存储过程中查找表名的列名作为保留关键字的主要内容,如果未能解决你的问题,请参考以下文章

sql server中使用sql语句修改列名

SQL Server 2000中查询表名,列名及字段类型

SQL Server 2000中查询表名,列名及字段类型

Oracle SQL 从执行计划中检索具有表名的列名作为表

SQL Server如何查找表名或列名中包含空格的表和列

SQL 查找存在某内容的存储过程都有哪些