我已经创建了一个函数,用于检索MS SQL Server 2005中数据库列的翻译,具体取决于所选的语言代码(例如'el-GR')。函数本身可以正常工作,但我无法将其结果用作检索列的别名。
这是我正在使用的代码:
SELECT
tblAuditors.[Full Name] as dbo.GetLocalizedGridTranslation('Auditor Name', @languageCode)
FROM tblCompanyAuditors
有谁知道如何欺骗SQL Server允许我将该函数用作别名?
答案 0 :(得分:2)
用括号[]
包裹别名:
SELECT
[dbo.GetLocalizedGridTranslation('Auditor Name', @languageCode)] = tblAuditors.[Full Name]
FROM tblAuditors
除此之外,您是否查询过表tblCompanyAuditors
这是一个错字,但该列是来自表tblAuditors
?
编辑:我刚才注意到列别名本身应该是函数的结果。
这有意义吗?别名是所有记录的列,并且将在每条记录上执行一个函数。如果这是一个存储过程,我建议将结果存储在变量中,并将其用作动态sql中的列别名。
DECLARE @column_alias VARCHAR(30)
SET @column_alias = dbo.GetLocalizedGridTranslation('Auditor Name', @languageCode);
-- Use dynamic SQL
DECLARE @sql VARCHAR(1000)
SET @sql = 'SELECT tblAuditors.[Full Name] AS ' + @column_alias + ' FROM tblAuditors'
EXEC sp_executesql @sql
答案 1 :(得分:1)
我认为您将需要使用动态SQL
即
declare @sql nvarchar(max)
select @sql = 'SELECT tblAuditors.[Full Name] as ['
+ dbo.GetLocalizedGridTranslation('Auditor Name', @languageCode)
+ '] FROM tblCompanyAuditors'
exec sp_executesql @sql