【发布时间】:2018-02-22 12:47:26
【问题描述】:
我正在尝试动态计算列名,但是 SQL Server 不允许这种情况发生。有正确的方法吗?
预期结果
SELECT Column_1
FROM Table
查询
DECLARE @param AS INT;
SELECT @param = 1;
EXEC('SELECT Column_' + CAST(@param AS VARCHAR) + ' FROM Table');
Catch:@Param 需要为 int,以便于提供输入。
【问题讨论】:
-
这表明您的桌子违反了 1NF,即所谓的重复组。这是一种可怕的数据建模方式,会导致各种问题。如果你要使用 varchar 你必须指定大小。如果您不这样做,则使用默认值。参数的默认值为 1,但变量的默认值为 30。要明确,避免混淆或错误。
-
啊,我完全明白你的意思@SeanLange!的确,这可能只是违反了一种或所有范式。但是,作为背景,这不是针对 OLTP 系统的,而是针对已知且有限的数据集的一次性分析。
-
不管用途是什么,设计才是问题所在。当您看到诸如 Email_1、Email_2、Email_3 之类的内容时,这表明一切都将是一场艰苦的战斗。如果您正确地设计表格,则可以很容易地从中检索数据。可悲的是,您正在努力检索数据...
-
没错,我是被糟糕设计困住的分析师。
标签: sql sql-server