SQL - 如何从另一个表中选择列别名?

时间:2014-03-10 10:11:32

标签: 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   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

这是包含别名(text)的表:

ID      ColID   UserID  Text            Order   Enabled?
50  22  1   id          1       1
51  1   1   CustTypes   2   1
52  2   1   Description 3   1
53  3   1   ApplyVAT    NULL    0
54  4   1   ProduceInvoices NULL    0
55  5   1   PurchaseSale    NULL    0
56  6   1   TermsDays   NULL    0
57  7   1   DateTimeLastUpdated NULL    0

1 个答案:

答案 0 :(得分:1)

我相信您需要使用动态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)
);

SqlFiddle here

动态Sql的一个(很多)注意事项是你需要确保别名数据针对Sql Injectin攻击进行验证。