SQL-如何从另一个表中选择列别名?
我在SQL中有一个包含数据的表和另一个包含该列别名的表。它用于翻译目的 我想知道如何在这些列上进行选择,但从另一个表中检索别名 这是包含真实列名的表:SQL-如何从另一个表中选择列别名?,sql,tsql,Sql,Tsql,我在SQL中有一个包含数据的表和另一个包含该列别名的表。它用于翻译目的 我想知道如何在这些列上进行选择,但从另一个表中检索别名 这是包含真实列名的表: ID PageID ColName Order Type Width IsDeleted 1 7 CustType 2 NULL NULL 0 2 7 Description 3 NULL NULL 0 3 7 ApplyVAT 4
ID PageID ColName Order Type Width IsDeleted
1 7 CustType 2 NULL NULL 0
2 7 Description 3 NULL NULL 0
3 7 ApplyVAT 4 NULL NULL 0
4 7 ProduceInvoices 5 NULL NULL 0
5 7 PurchaseSale 6 NULL NULL 0
6 7 TermsDays 7 NULL NULL 0
7 7 DateTimeLastUpdated 8 NULL NULL 0
这是包含别名(文本)的表:
我相信您需要使用动态sql来完成此操作,例如:
DECLARE @Sql NVARCHAR(MAX);
SELECT TOP 1 @Sql = 'SELECT dt.ID as ' + at.IDAlias + ', dt.Town as ' + at.TownAlias
+ ' FROM DataTable dt'
FROM AliasTable at
WHERE at.LanguageID = 2;
EXEC(@Sql)
给出了数据表的示例
CREATE TABLE DataTable
(
ID INT,
Town NVARCHAR(50)
);
以及一个表,其中包含上述列的语言相关别名:
CREATE TABLE AliasTable
(
LanguageId INT,
IDAlias NVARCHAR(100),
TownAlias NVARCHAR(100)
);
动态Sql的一个(许多)警告是,您需要确保别名数据针对Sql Injectin攻击进行验证。对于表的布局很抱歉,我无法让它们显示在这里。您是否根据“包含真实列名的表”动态构建所有查询?另外,如何支持别名表中相同列的多个转换?(例如,通过
UserId
?)目前由于我所处的阶段,如果已为该页面和用户添加了内容,我将从翻译表(通过用户)中获取列表。我需要能够使用静态表中的列对数据库表进行选择,并显示用户已翻译的列。select语句此时是动态创建的。我尝试了此操作,但由于某些原因,我得到了无效的列名“CustType”。虽然列确实存在,但作为错误返回。我还对生成的sql列进行了选择,结果成功了。是否有任何原因可以解释为什么它不能与动态SQL一起工作?问题是,您正被预投影和后投影的列名所困扰。一旦您将CTE应用于项目名称,那么您需要在最终选择中使用后投影列名(由于映射,列名为custypes
)啊,好了,我会记住未来的CTE。谢谢
CREATE TABLE AliasTable
(
LanguageId INT,
IDAlias NVARCHAR(100),
TownAlias NVARCHAR(100)
);