如何使用动态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语句中的定义表以获得动态命名。
答案 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