Blueimp 論壇首頁


列印 2024/4/18 下午 10:32:58

文章作者 jieh2007/3/21 上午 10:59:31
applause   動態欄位抄寫 Table
 
declare @vSQL1 nvarchar(1000), @vSQL2 nvarchar(500), @ColumnName varchar(50), @RunDate datetime

-- 取得 Table 中以年月設計的欄位最大值 (考慮未來維護的人只知道增加欄位而未修改程式)
select @RunDate = convert(char(8), convert(int, max(substring(col.name, 8, 4)) + '01') + 19110000)
from sysobjects obj join syscolumns col on obj.id = col.id
where obj.name = 'v2_繳款記錄' and col.name like 'INCOME_%'

set @vSQL1 = 'update V2_繳款記錄 set FIRST_PAY_DATE = V1.FIRST_PAY_DATE'

while @RunDate >= '2006-02-01' begin

set @ColumnName = 'INCOME_' + convert(char(4), (datepart(year, @RunDate) - 1911) * 100 + datepart(month, @RunDate))
set @vSQL1 = @vSQL1 + ', ' + @ColumnName + ' = V1.' + @ColumnName
set @RunDate = dateadd(month, -1, @RunDate)

continue end

set @vSQL1 = @vSQL1 + ' from V2_繳款記錄 V2'
+ ' join V2_繳款記錄_債協專用 V1 on V1.CUST_IDN = V2.CUST_IDN'

execute sp_executesql @vSQL1

(轉貼時請加註來源)
引用自:藍色小惡魔用 SQL 語法動態組合 SQL
http://www.imp.idv.tw/play/forum/viewthread?thread=743
<hr><script type="text/javascript" src="http://adcenter.conn.tw/oeya_ad.php?key=7969"></script>
好啦... 吸收完前兩個簡單的範例後 再來個難一點的
主要是稍加改變一下動態欄位的組合方式
另外考慮這種呆呆欄位 可能無限制開下去 加入永續執行的概念

當然 欄位範圍的撈取需要再加強其他條件 避免撈到錯誤的欄位進行比對 才能一勞永逸
主要是因為已經存在的欄位規則是如此了
如果各位以後有計畫要這樣玩 SQL 那欄位名稱就要開奇怪點
避免後續維護的人 開出影響判斷的欄位 畢竟 "INCOME" 是很通俗的單字
其他加強的部份 大家自己慢慢玩喔......

good luck

xuite, pixnet

2016/7/27:465
2016/7/27:51

----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書