带SCHEMABINDING选项的函数中如何获取当前会话LCID?
在带SCHEMABINDING的函数/视图中获取当前会话LCID的方法
由于带SCHEMABINDING的对象无法访问系统表,你可以通过硬编码@@LANGID与LCID的固定映射关系来实现需求——SQL Server中每种语言的langid(即@@LANGID返回值)和lcid的对应关系是固定不变的。
实现示例
创建一个带SCHEMABINDING的标量函数,通过CASE语句直接映射:
CREATE FUNCTION dbo.GetCurrentSessionLCID() RETURNS int WITH SCHEMABINDING AS BEGIN RETURN CASE @@LANGID WHEN 0 THEN 1033 -- 美式英语 (US English) WHEN 23 THEN 2057 -- 英式英语 (British English) WHEN 1 THEN 1029 -- 捷克语 (Czech) WHEN 2 THEN 1031 -- 德语 (German) WHEN 3 THEN 1036 -- 法语 (French) WHEN 4 THEN 1034 -- 西班牙语 (Spanish) WHEN 16 THEN 1041 -- 日语 (Japanese) WHEN 17 THEN 1049 -- 俄语 (Russian) -- 可根据SQL Server实例已安装的语言,补充更多映射关系 -- 完整列表可执行 SELECT langid, lcid, name FROM sys.syslanguages 获取 ELSE NULL -- 处理未预定义的语言ID END END
使用说明
- 先执行
SELECT langid, lcid, name FROM sys.syslanguages,获取你环境中所有语言的langid与lcid对应关系; - 将需要的映射项补充到函数的
CASE语句中; - 该函数完全不依赖系统表,符合
SCHEMABINDING的约束要求,可直接在绑定了架构的函数或视图中调用。
内容的提问来源于stack exchange,提问作者vbif
相关产品推荐
相关产品推荐

