动态别名视图查询SQL中的列

时间:2018-05-01 14:32:37

标签: sql sql-server

如何使用动态SQL查询表,然后使用其中一个结果对列进行别名?

我正在尝试这样的事情:

SELECT 
  ID, ModelName INTO #tmpTable  
FROM Models

然后:

SELECT 
  ModelNumber AS (SELECT ModelName FROM #tmpTable)  
FROM NewModels 

对于那些要求更多细节的人: 我们有一个包含我们想要的所有内容的视图,但列是“def123”之类的ID。在另一个表中,我们有名称来解析ID,例如“def123”,“FName”。我们想查询视图但是显示名称(使用AS)而不是ID。本质上,我们希望查询AS语句中的定义表以获得动态命名。

2 个答案:

答案 0 :(得分:1)

不要试图弯曲动态SQL,只有实现它的真相,没有必要......

另一个其他ModelNumber的ModelName仍然会闻到相同的......

#IMissSQLQuotes

select ID
     , ModelName as ModelNumber
  from NewModels

答案 1 :(得分:0)

要考虑的一个可能途径是替换动态sql中的别名 基于具有新别名的表。

示例代码段:

IF OBJECT_ID('tempdb..#NewModels') IS NOT NULL DROP TABLE #NewModels;
CREATE TABLE #NewModels (ModelNumber int, ModelType char(1));
INSERT INTO #NewModels (ModelNumber, ModelType) values 
(100, 'A'),
(101, 'B'),
(102, 'C');

IF OBJECT_ID('tempdb..#tmpModelNames') IS NOT NULL DROP TABLE #tmpModelNames;
CREATE TABLE #tmpModelNames (Code varchar(30) primary key, ModelName varchar(30));
INSERT INTO #tmpModelNames (Code, ModelName) values 
('Col1', 'Model Name 1'), 
('Col2', 'Model Name 2');

DECLARE @Sql NVARCHAR(max) = 'SELECT 
  ModelNumber AS [Col1], 
  ModelType AS [Col2]
FROM #NewModels
WHERE ModelNumber = @ModelNumber';

select @Sql = replace(@Sql, quotename(Code), quotename(ModelName)) from #tmpModelNames;
--select @Sql as Sql;

EXECUTE sp_executesql @Sql, N'@ModelNumber int', @ModelNumber = 101;

返回:

Model Name 1  Model Name 2
------------  -------------
101           B