sql - 使用变量作为列名

标签 sql sql-server t-sql

我的问题是如何在 select 语句中使用变量作为列名。我已将变量 @B 创建为列名称,即 BGNDATE1 到 BGNDATE12。我没有创建 12 个 select 语句,而是创建了一个 while 循环。列名基本上是 BGNDATE + 递增的整数。

我收到的错误是:

将 varchar 值“BGNDATE1”转换为数据类型 int 时转换失败。

USE X --this is the database    
DECLARE @DATES TABLE (ROWID INT, FISCDATES INT)

    DECLARE @FY INT =  2012
    DECLARE @I INT
    DECLARE @IV VARCHAR(2)
    DECLARE @B VARCHAR(9)

    SELECT @FY AS FY
    SET @I = 1
    WHILE @I <= 12
    BEGIN
    SET @IV = @I
    SET @B = 'BGNDATE' + @IV

    INSERT INTO @DATES (ROWID)
    SELECT @I

    MERGE INTO @DATES AS T
    USING (

--这是变量 @B 的错误所在

SELECT @B AS FISCDATES FROM DBO.Y  -- Y is the table in the database
  WHERE FSCYEAR = @FY) AS S
ON T.ROWID = @I
WHEN MATCHED 
    THEN UPDATE
    SET T.FISCDATES = S.FISCDATES;

SET @I = @I + 1
END

SELECT * FROM @DATES

最佳答案

您不能使用变量作为列名(除非您动态创建整个查询),但您可以使用变量从不同的列中进行选择:

...
SELECT
  CASE @IV
    WHEN 1 THEN BGNDATE1
    WHEN 2 THEN BGNDATE2
    WHEN 3 THEN BGNDATE3
    WHEN 4 THEN BGNDATE4
    WHEN 5 THEN BGNDATE5
    WHEN 6 THEN BGNDATE6
    WHEN 7 THEN BGNDATE7
    WHEN 8 THEN BGNDATE8
    WHEN 9 THEN BGNDATE9
    WHEN 10 THEN BGNDATE10
    WHEN 11 THEN BGNDATE11
    WHEN 12 THEN BGNDATE12
  END AS FISCDATES FROM DBO.Y
...

关于sql - 使用变量作为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017521/

相关文章:

sql-server - 将新表列添加到 Microsoft SQL Server 中的特定序数位置

c# - 在 C# 中使用参数化查询时抛出异常

sql-server - OUTPUT INTO 子句中可以使用哪些列?

mysql - 求不同表不同列之和的总和

sql-server - 无法删除数据库的 SQL Azure 只读用户

sql-server - 分组行的排序依据和顶部

SQL显示两个日期之间的月份和年份

sql - 如何在 SQL Select 语句上检查 List 中的特定字符串?

sql - 哪个 RDBMS 具有最丰富的 ANSI-SQL 超集?

sql - 适用于 Delphi 2010 和 Unidac 的可视化 SQL 查询生成器