在 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
这里请看列名TimeStamp
、Name
和表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 存储过程中查找表名的列名作为保留关键字的主要内容,如果未能解决你的问题,请参考以下文章