[SQL ] 請位欄位可以是變數嗎

看板Database (資料庫)作者 (......)時間2年前 (2022/02/24 15:37), 2年前編輯推噓1(104)
留言5則, 3人參與, 2年前最新討論串1/1
資料庫名稱:MS SQL 資料庫版本:2008R2 內容/問題描述: 有一個table 部門 分類 年度 01 02 03 A 銷售 2021 250 300 250 A 折讓 2021 10 5 0 欄位01 02 03是各月份 select 01 FROM table where ... 這01能用變數取代嗎 declare @i int 轉換成2位補0 varchar(2) select quotename(@i) from table 出來是[01] 失敗 我很多利用寄送的html報表要用到 現在是寫12次 其他嘗試還有 1.試用 sp_executesql 比寫12次複雜不少 ,寫一半放棄 2.轉成table (月,值) 稍微簡單一點,若沒有其他方法就用此方法 以下是要輸出HTML格式 為了顯示 1,234 要寫很長一串 來問有無簡單點的寫法 SET @Html = @Html + N'<td>' + (SELECT Isnull(nullif( convert(varchar(10),Left(convert(varchar(20),convert(money,[01 ]),1),len(convert(varchar(20),convert(money,[01]),1))-3) ),'0') ,'') FROM #tmp WHERE rid = @i) + N'</td>'; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.65.181 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1645688264.A.3C5.html

02/24 19:32, 2年前 , 1F
為啥不撈出來用程式轉成報表....
02/24 19:32, 1F
因為這是利用stored procedure 半夜自動發信 這功能非常好用,user定期收到他需要的 除outlook的html不太好寫外 同樣的報表UI也會有 那邊就不用管這些,直接顯示 其實我轉成table重寫完了 簡單不少 只是這功能我查很久查不到 想上來問問 ※ 編輯: tsongs (125.227.65.181 臺灣), 02/25/2022 12:05:28

02/25 16:34, 2年前 , 2F
SET @sql = 'select' +@i+ 'FROM table where ...';
02/25 16:34, 2F

02/25 16:37, 2年前 , 3F
記得要 into 到 temp table
02/25 16:37, 3F

02/25 16:37, 2年前 , 4F
然後 EXEC (@sql) 再 select temp table 就有你要的
02/25 16:37, 4F

02/27 16:32, 2年前 , 5F
做動態 SQL 指令的話要小心 SQL injection 攻擊哦
02/27 16:32, 5F
文章代碼(AID): #1Y5pN8F5 (Database)
文章代碼(AID): #1Y5pN8F5 (Database)