SQL(含SQL Server)是否有类似C#、Java的nameof运算符及替代方案?
SQL Server中类似
nameof的实现方案 原生支持情况
SQL Server没有原生的nameof运算符,无法像C#、Java那样直接通过运算符获取标识符的字符串形式。
等效函数实现
可以基于系统目录视图编写自定义函数,实现获取对象名称的功能,以下是几种常见场景的实现:
1. 获取对象(表/视图等)的名称
创建标量函数返回对象的单纯名称:
CREATE FUNCTION dbo.GetObjectName(@objectId INT) RETURNS VARCHAR(128) AS BEGIN RETURN (SELECT name FROM sys.objects WHERE object_id = @objectId) END
使用示例:
-- 返回"MyTable" SELECT dbo.GetObjectName(OBJECT_ID('[dbo].[MyTable]')) AS TableName
2. 获取带架构名的完整对象名
如果需要包含架构(如[dbo].[MyTable]),可以修改函数:
CREATE FUNCTION dbo.GetQualifiedObjectName(@objectId INT) RETURNS VARCHAR(256) AS BEGIN RETURN ( SELECT QUOTENAME(s.name) + '.' + QUOTENAME(o.name) FROM sys.objects o JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE o.object_id = @objectId ) END
使用示例:
-- 返回"[dbo].[MyTable]" SELECT dbo.GetQualifiedObjectName(OBJECT_ID('[dbo].[MyTable]')) AS QualifiedTableName
3. 获取列名
针对列的场景,基于sys.columns编写函数:
CREATE FUNCTION dbo.GetColumnName(@objectId INT, @columnId INT) RETURNS VARCHAR(128) AS BEGIN RETURN (SELECT name FROM sys.columns WHERE object_id = @objectId AND column_id = @columnId) END
使用示例:
-- 返回"MyTable"表中"ID"列的名称 SELECT dbo.GetColumnName(OBJECT_ID('[dbo].[MyTable]'), COLUMNPROPERTY(OBJECT_ID('[dbo].[MyTable]'), 'ID', 'ColumnId')) AS ColumnName
注意事项
- 这类函数依赖SQL Server的系统目录视图,调用者需要具备访问
sys.objects、sys.columns等视图的权限; - 如果传入的对象ID不存在,函数会返回
NULL。
内容的提问来源于stack exchange,提问作者LSM07
相关产品推荐
相关产品推荐

