我的問題在這裏是如何使用變量作爲select語句中的列名稱。我已經創建了變量@B作爲BGNDATE1到BGNDATE12的列名。我創建了一個while循環,而不是有12個select語句。列名基本上是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
您需要爲此使用動態SQL查詢。檢查此:http://technet.microsoft.com/en-us/library/ms188001.aspx – cha
我會盡量避免動態SQL:>它只會變得更加混亂和混亂。嘗試修復架構 - 當然,因爲這可能不可能出於某些愚蠢的原因,[*使用UNPIVOT修復/規範化數據*](http://weblogs.sqlteam.com/jeffs/archive/2008/ 04/23/unpivot.aspx)(在所有「BGNDATEx」列中使用UNPIVOT),並使用* normalized *結果更加理智地處理操作。 – user2246674