我的问题是如何在 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/