SQL 更新

每次部署時需執行的 SQL(DDL / DML / SP)。共 10 個 migration。

2026-06-09 perdata-signature-view-col
vwseek_perdata
ALTER VIEW [dbo].[vwseek_perdata]
AS
SELECT          員工編號, 姓名, 部門代號, email, 公司代碼, 身份證字號, 性別, 到職日期, 銀行帳號, 本國人, 員工別, 員工類別, 職稱,
                            職級, 簽名圖檔1
FROM              dbo.perdata
GO

EXEC sp_refreshview 'vwseek_perdata';
GO
📖 對應 changelog ↗
2026-06-09 db-sql-scripts-backfill
DARB_LOG_SYS_AI_EXECrp_mrp_drpsht_mrpsht_dvwlcl_rptdatvw_rpsht_mvw_rpsht_dvw_rp_mvw_rp_d
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
ALTER VIEW [dbo].[vwlcl_rptdat]
AS
SELECT          TOP (100) PERCENT 報表編號, 報表分類, 報表用途, 報表名稱, excel檔名, 語言版本, 報表尺寸, 排序, 報表抬頭, 
                            報表位置, 國家區域, sqlite, 可顯示, 插件名稱, 是否為遠端, 註腳, 單據別
FROM              dbo._rptdat
ORDER BY   報表編號
GO


EXEC sp_refreshview 'vwlcl_rptdat';

ALTER TABLE rp_m add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE rp_m add [原幣稅額] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_m add [總原幣未稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_m add [總本幣未稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_m add [含稅別] [char](1) NOT NULL DEFAULT '';
ALTER TABLE rp_d add [原幣稅額] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [折扣] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [代工價含稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [其他金含稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [微調原含稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [微調本含稅] [decimal](19,4) NOT NULL DEFAULT 0;
ALTER TABLE rp_d add [備註] [nvarchar](120) NOT NULL DEFAULT '';

ALTER TABLE rpsht_m add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE rpsht_d add	[分類索引4] [nvarchar](30) NOT NULL  DEFAULT '';
ALTER TABLE rpsht_d add	[單別3] [char](2) NOT NULL DEFAULT '';
ALTER TABLE rpsht_d add	[單號3] [nvarchar](20) NOT NULL DEFAULT '';
go

ALTER VIEW [dbo].[vw_rpsht_m]
AS
SELECT          dbo.rpsht_m.收付款單號, dbo.rpsht_m.收付款日期, dbo.rpsht_m.收付款別, dbo.rpsht_m.公司代碼, 
                            dbo.rpsht_m.客戶代號, dbo.vwseek_cudata.客戶簡稱, dbo.rpsht_m.廠商代號, dbo.vwseek_spdata.廠商簡稱, 
                            dbo.rpsht_m.業務員編號, dbo.vwseek_salesmen.姓名, dbo.rpsht_m.備註, dbo.rpsht_m.沖帳備註, 
                            dbo.rpsht_m.出納傳票號, dbo.rpsht_m.沖帳傳票號, dbo.rpsht_m.聯絡單id, dbo.rpsht_m.工作流程, 
                            dbo.rpsht_m.審核人員, dbo.rpsht_m.審核日期, dbo.rpsht_m.已審核, dbo.rpsht_m.輸入日期, dbo.rpsht_m.輸入人員, 
                            dbo.rpsht_m.輸入地點, dbo.rpsht_m.增刪修, dbo.rpsht_m.選擇, dbo.rpsht_m.管制碼, dbo.rpsht_m.srvdbid, 
                            dbo.rpsht_m.pkid, dbo.rpsht_m.logid, dbo.rpsht_m.linkid, dbo.rpsht_m.沖帳方式, dbo.rpsht_m.廠商代號1, 
                            dbo.rpsht_m.廠商代號2, dbo.rpsht_m.付款匯率日, ISNULL(dbo.vwseek_cudata.付款方式碼, 0) AS 客付方式碼, 
                            ISNULL(dbo.vwseek_cudata.付款方式, N'') AS 客付款方式, ISNULL(dbo.vwseek_cudata.收付條件號, N'') 
                            AS 客付條件號, ISNULL(dbo.vwseek_cudata.付款條件, N'') AS 客付款條件, dbo.rpsht_m.建檔日期
FROM              dbo.rpsht_m LEFT OUTER JOIN
                            dbo.vwseek_salesmen ON dbo.rpsht_m.業務員編號 = dbo.vwseek_salesmen.業務員編號 LEFT OUTER JOIN
                            dbo.vwseek_spdata ON dbo.rpsht_m.廠商代號 = dbo.vwseek_spdata.廠商代號 LEFT OUTER JOIN
                            dbo.vwseek_cudata ON dbo.rpsht_m.客戶代號 = dbo.vwseek_cudata.客戶代號
GO


GO

ALTER VIEW [dbo].[vw_rpsht_d]
AS
SELECT          dbo.rpsht_d.序號, dbo.rpsht_d.科目代號, ISNULL(dbo.accl.科目名稱, N'') AS 科目名稱, dbo.rpsht_d.摘要, 
                            dbo.rpsht_d.客廠代號, dbo.rpsht_d.幣別, dbo.rpsht_d.匯率, dbo.rpsht_d.原借方金額, dbo.rpsht_d.原貸方金額, 
                            dbo.rpsht_d.本借方金額, dbo.rpsht_d.本貸方金額, dbo.rpsht_d.部門代號, dbo.rpsht_d.員工編號, 
                            dbo.rpsht_d.項目編號, dbo.rpsht_d.專案代號, dbo.rpsht_d.分類索引1, dbo.rpsht_d.分類索引2, 
                            dbo.rpsht_d.分類索引3, dbo.rpsht_d.單別1, dbo.rpsht_d.單號1, dbo.rpsht_d.單別2, dbo.rpsht_d.單號2, 
                            dbo.rpsht_d.財務單id, dbo.rpsht_d.財務明細id, dbo.rpsht_d.輸入日期, dbo.rpsht_d.輸入人員, dbo.rpsht_d.輸入地點, 
                            dbo.rpsht_d.增刪修, dbo.rpsht_d.選擇, dbo.rpsht_d.管制碼, dbo.rpsht_d.srvdbid, dbo.rpsht_d.pkid, dbo.rpsht_d.logid, 
                            dbo.rpsht_d.linkid, dbo.rpsht_d.產品群組, dbo.rpsht_d.品號, dbo.rpsht_d.到期日, dbo.rpsht_d.其他id, 
                            dbo.rpsht_d.收付款日, dbo.rpsht_d.帳戶代號, ISNULL(dbo.rp_m.單號, N'') AS 單號, ISNULL(dbo.rp_m.發票號碼, N'') 
                            AS 發票號碼, ISNULL(dbo.rp_m.備註, N'') AS 備註, dbo.rpsht_d.分類索引4, dbo.rpsht_d.單別3, 
                            dbo.rpsht_d.單號3
FROM              dbo.rpsht_d LEFT OUTER JOIN
                            dbo.rp_m ON dbo.rpsht_d.單號2 = dbo.rp_m.財務單號 LEFT OUTER JOIN
                            dbo.accl ON dbo.rpsht_d.科目代號 = dbo.accl.科目代號
GO
ALTER VIEW [dbo].[vw_rp_m]
AS
SELECT          dbo.rp_m.公司代碼, dbo.rp_m.財務類別, dbo.rpdef.單據名稱, dbo.rp_m.財務單號, dbo.rp_m.收付款單號, 
                            dbo.rp_m.相關單號, dbo.rp_m.客廠部代號, dbo.rp_m.收付客廠號, dbo.rp_m.帳款期別, dbo.rp_m.立帳日期, 
                            dbo.rp_m.發票日期, dbo.rp_m.發票號碼, dbo.rp_m.回轉日期, dbo.rp_m.單號, dbo.rp_m.參考單號, 
                            dbo.rp_m.獎金日期, dbo.rp_m.業務員編號, dbo.rp_m.消費者, dbo.rp_m.原幣應收付, dbo.rp_m.本幣應收付, 
                            dbo.rp_m.稅額, dbo.rp_m.幣別, dbo.rp_m.匯率, dbo.rp_m.沖帳原幣, dbo.rp_m.沖帳本幣, dbo.rp_m.稅別, 
                            dbo.rp_m.發票抬頭, dbo.rp_m.統一編號, dbo.rp_m.發票金額, dbo.rp_m.收付條件號, dbo.vwseek_payterm.說明, 
                            dbo.rp_m.收付款日, dbo.rp_m.到期日, dbo.rp_m.傳票號碼, dbo.rp_m.進銷分類, dbo.rp_m.備註, dbo.rp_m.申請部門, 
                            dbo.rp_m.申請人, dbo.rp_m.使用人, dbo.rp_m.申請日期, dbo.rp_m.事由, dbo.rp_m.受款人, dbo.rp_m.付款方式碼, 
                            dbo.rp_m.審核人員, dbo.rp_m.審核日期, dbo.rp_m.其他方式, dbo.rp_m.單據張數, dbo.rp_m.月結廠商, 
                            dbo.rp_m.隨貨附發票, dbo.rp_m.轉入備註, dbo.rp_m.訂單編號, dbo.rp_m.訂金比率, dbo.rp_m.輸入日期, 
                            dbo.rp_m.輸入人員, dbo.rp_m.輸入地點, dbo.rp_m.增刪修, dbo.rp_m.選擇, dbo.rp_m.管制碼, dbo.rp_m.srvdbid, 
                            dbo.rp_m.pkid, dbo.rp_m.logid, dbo.rp_m.linkid, dbo.vwseek_salesmen.姓名, dbo.vwseek_taxtype.名稱, 
                            dbo.vwseek_dept.部門簡稱, dbo.vwseek_cusp.客廠部簡稱, vwseek_cusp_1.客廠部簡稱 AS 客廠簡稱1, 
                            dbo.rp_m.程式類別, dbo.rp_m.使用日期, dbo.rp_m.使用部門, dbo.rp_m.帳款起始日, dbo.rp_m.聯絡單id, 
                            dbo.rp_m.工作流程, dbo.rp_m.已審核, dbo.perdata.姓名 AS 申請人姓名, h.姓名 AS 使用人姓名, dbo.rp_m.數量合併, 
                            dbo.rp_m.傳票號碼1, dbo.rp_m.交易日期, dbo.rp_m.專案代號, dbo.rp_m.關係人, dbo.rp_m.群組代號, 
                            dbo.aproj.專案簡稱, dbo.rp_m.使用截止日, dbo.rp_m.折讓金額, dbo.rp_m.折讓稅額, dbo.rp_m.暫估原幣, 
                            dbo.rp_m.暫估本幣, dbo.rp_m.建檔日期, dbo.rp_m.原幣稅額, dbo.rp_m.總原幣未稅, dbo.rp_m.總本幣未稅, 
                            dbo.rp_m.含稅別
FROM              dbo.rp_m INNER JOIN
                            dbo.rpdef ON dbo.rp_m.財務類別 = dbo.rpdef.財務類別 LEFT OUTER JOIN
                            dbo.aproj ON dbo.rp_m.專案代號 = dbo.aproj.專案代號 LEFT OUTER JOIN
                            dbo.vwseek_cusp AS vwseek_cusp_1 ON dbo.rp_m.收付客廠號 = vwseek_cusp_1.客廠部代號 LEFT OUTER JOIN
                            dbo.vwseek_cusp ON dbo.rp_m.客廠部代號 = dbo.vwseek_cusp.客廠部代號 LEFT OUTER JOIN
                            dbo.vwseek_payterm ON dbo.rp_m.收付條件號 = dbo.vwseek_payterm.收付條件號 LEFT OUTER JOIN
                            dbo.vwseek_salesmen ON dbo.rp_m.業務員編號 = dbo.vwseek_salesmen.業務員編號 LEFT OUTER JOIN
                            dbo.vwseek_dept ON dbo.rp_m.申請部門 = dbo.vwseek_dept.部門代號 LEFT OUTER JOIN
                            dbo.vwseek_taxtype ON dbo.rp_m.稅別 = dbo.vwseek_taxtype.稅別 LEFT OUTER JOIN
                            dbo.perdata ON dbo.rp_m.申請人 = dbo.perdata.員工編號 LEFT OUTER JOIN
                            dbo.perdata AS h ON dbo.rp_m.使用人 = h.員工編號
GO
ALTER VIEW [dbo].[vw_rp_d]
AS
SELECT          dbo.rp_d.序號, dbo.rp_d.期別調整, dbo.rp_d.單號pkid, dbo.rp_d.幣別, dbo.rp_d.匯率, dbo.rp_d.科目代號, 
                            dbo.rp_d.轉入倉儲, dbo.rp_d.轉出倉儲, dbo.rp_d.交易別碼, dbo.rp_d.品號, dbo.rp_d.品名, dbo.rp_d.客廠品號, 
                            dbo.rp_d.其他鍵, dbo.rp_d.數量, dbo.rp_d.單位, dbo.rp_d.單價, dbo.rp_d.代工單價, dbo.rp_d.其他金額, 
                            dbo.rp_d.原幣未稅, dbo.rp_d.原幣含稅, dbo.rp_d.本幣未稅, dbo.rp_d.本幣含稅, dbo.rp_d.沖帳原幣, 
                            dbo.rp_d.沖帳本幣, dbo.rp_d.單價別, dbo.rp_d.摘要, dbo.rp_d.客廠代號, dbo.rp_d.客廠名稱, dbo.rp_d.統一編號, 
                            dbo.rp_d.發票號碼, dbo.rp_d.發票日期, dbo.rp_d.稅別, dbo.rp_d.其他憑證, dbo.rp_d.稅額, dbo.rp_d.發票pkid, 
                            dbo.rp_d.輸入日期, dbo.rp_d.輸入人員, dbo.rp_d.輸入地點, dbo.rp_d.增刪修, dbo.rp_d.選擇, dbo.rp_d.管制碼, 
                            dbo.rp_d.srvdbid, dbo.rp_d.pkid, dbo.rp_d.logid, dbo.rp_d.linkid, dbo.accl.科目名稱, dbo.rp_d.單號, 
                            dbo.rp_d.交易記錄號, dbo.rp_d.需求部門, dbo.rp_d.收付款pkid, dbo.rp_d.產品群組, dbo.grpm.說明, dbo.grpm.分類1, 
                            dbo.grpm.分類2, dbo.grpm.分類3, dbo.rp_d.員工編號, dbo.rp_d.缺件說明, dbo.rp_d.缺件後補日, dbo.rp_d.缺件已補, 
                            dbo.rp_d.海關代徵號, dbo.rp_d.單據張數1, ISNULL(dbo.vwseek_dept.部門簡稱, N'') AS 部門簡稱, 
                            ISNULL(dbo.cusp.客廠部簡稱, N'') AS 客廠部簡稱, dbo.rp_d.含稅單價, dbo.rp_d.客廠訂單號, dbo.rp_d.日期1, 
                            dbo.rp_d.微調原幣, dbo.rp_d.微調本幣, dbo.rp_d.原幣稅額, dbo.rp_d.折扣, dbo.rp_d.代工價含稅, 
                            dbo.rp_d.其他金含稅, dbo.rp_d.微調原含稅, dbo.rp_d.微調本含稅, dbo.rp_d.備註
FROM              dbo.rp_d LEFT OUTER JOIN
                            dbo.cusp ON dbo.rp_d.客廠代號 = dbo.cusp.客廠部代號 LEFT OUTER JOIN
                            dbo.accl ON dbo.rp_d.科目代號 = dbo.accl.科目代號 LEFT OUTER JOIN
                            dbo.grpm ON dbo.rp_d.產品群組 = dbo.grpm.群組代號 LEFT OUTER JOIN
                            dbo.vwseek_dept ON dbo.rp_d.需求部門 = dbo.vwseek_dept.部門代號
GO
EXEC sp_refreshview N'dbo.vw_rp_m';
EXEC sp_refreshview N'dbo.vw_rp_d';

EXEC sp_refreshview N'dbo.vw_rpsht_m';
EXEC sp_refreshview N'dbo.vw_rpsht_d';

INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'1     ', N'原任職公司     ', N'C', 30, 0, N'服務機關名稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 1, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'2     ', N'原部門       ', N'C', 30, 0, N'部門/職稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 2, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'3     ', N'原任職日期     ', N'C', 10, 0, N'到職日', N'9999/99/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2019-04-18T17:18:41.633' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 3, 215195, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'4     ', N'原離職日期     ', N'C', 10, 0, N'離職日', N'9999/99/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2019-04-18T17:18:41.633' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 4, 215195, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'5     ', N'原待遇       ', N'N', 18, 6, N'薪資(月)', N'999,999,999', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 5, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'6     ', N'原工作內容     ', N'C', 80, 0, N'主要工作', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 6, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'7     ', N'原離職原因     ', N'C', 80, 0, N'離職原因', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 7, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'8     ', N'學校名稱      ', N'C', 30, 0, N'學校名稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 8, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'9     ', N'院系科別      ', N'C', 30, 0, N'院系科別', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 9, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'10    ', N'修業年月起     ', N'C', 7, 0, N'修業起始年月', N'9999/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 10, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'11    ', N'修業年月迄     ', N'C', 7, 0, N'修業結束年月', N'9999/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 11, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'12    ', N'是否畢業      ', N'C', 1, 0, N'畢/肄', N'Y', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 12, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'13    ', N'學位        ', N'C', 30, 0, N'學位', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 13, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'14    ', N'眷屬稱謂      ', N'C', 10, 0, N'稱謂', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 14, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'15    ', N'眷屬姓名      ', N'C', 10, 0, N'姓名', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 15, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'16    ', N'眷屬出生      ', N'C', 10, 0, N'出生日期', N'9999/99/99', N'CHKDATE', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-09T00:04:00.727' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 16, 64740, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'17    ', N'眷屬職業      ', N'C', 20, 0, N'職業', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 17, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'18    ', N'緊急聯絡人     ', N'C', 20, 0, N'姓名', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2022-10-13T17:20:14.240' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 18, 526961, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'19    ', N'緊急關係      ', N'C', 10, 0, N'關係', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 19, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'20    ', N'緊急電話      ', N'C', 20, 0, N'電話', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 20, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'21    ', N'緊急地址      ', N'C', 80, 0, N'地址', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 21, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'48    ', N'身份證號      ', N'C', 14, 0, N'身份證號', N'XXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 55, 64734, 3)
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'49    ', N'眷屬關係      ', N'C', 10, 0, N'眷屬關係', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 56, 64734, 3)
GO
INSERT [dbo].[datatplm] ([資料模板號], [說明], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'P1    ', N'人事明細資料', CAST(N'2012-10-04T15:32:02.280' AS DateTime), N'令狐沖', N'WXWG101234 # wg101', N' ', N' ', 0, 1, 3, 2109, 0)
GO

USE [darbnogicsa1]
GO
/****** Object:  StoredProcedure [dbo].[TWORK_AI_QUERY]    Script Date: 2026/6/2 下午 06:40:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- 預存程序:TWORK_AI_QUERY
-- 參數(配合 Log_Sys_Exec 的 LP 慣例):
--   LP_DATAEVENT  事件名稱(Log 用)
--   LP_P1         使用者代號
--   LP_P2         AI 生成的 SELECT 語句
--   LP_P3         使用者原始問題描述
--   LP_P4         最大回傳筆數(字串,預設 "200")
-- =============================================
ALTER   PROCEDURE [dbo].[TWORK_AI_QUERY]    
    @LP_P1        NVARCHAR(50)  = '',   -- UserId
    @LP_P2        NVARCHAR(MAX) = '',   -- GeneratedSQL
    @LP_P3        NVARCHAR(500) = '',   -- Description
    @LP_P4        NVARCHAR(10)  = '200' -- MaxRows
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ErrorMsg  NVARCHAR(500);
    DECLARE @FinalSQL  NVARCHAR(MAX);
    DECLARE @UpperSQL  NVARCHAR(MAX);
    DECLARE @MaxRows   INT = TRY_CAST(@LP_P4 AS INT);

    IF @MaxRows IS NULL OR @MaxRows <= 0
        SET @MaxRows = 200;

    -- -----------------------------------------------
    -- 1. 基本驗證
    -- -----------------------------------------------
    IF @LP_P2 IS NULL OR LTRIM(RTRIM(@LP_P2)) = ''
    BEGIN
        SET @ErrorMsg = 'SQL 語句不可為空白';
        INSERT INTO _ai_query_log (使用者代號, 查詢描述, 執行SQL, 執行結果)
        VALUES (@LP_P1, @LP_P3, @LP_P2, @ErrorMsg);
        RAISERROR(@ErrorMsg, 16, 1);
        RETURN;
    END

    SET @UpperSQL = UPPER(LTRIM(RTRIM(@LP_P2)));

    -- -----------------------------------------------
    -- 2. 只允許 SELECT
    -- -----------------------------------------------
    IF LEFT(@UpperSQL, 6) <> 'SELECT'
    BEGIN
        SET @ErrorMsg = '只允許 SELECT 查詢語句';
        INSERT INTO _ai_query_log (使用者代號, 查詢描述, 執行SQL, 執行結果)
        VALUES (@LP_P1, @LP_P3, @LP_P2, @ErrorMsg);
        RAISERROR(@ErrorMsg, 16, 1);
        RETURN;
    END

    -- -----------------------------------------------
    -- 3. 禁止危險關鍵字
    -- -----------------------------------------------
    IF @UpperSQL LIKE '%INSERT%'   OR @UpperSQL LIKE '%UPDATE%'  OR
       @UpperSQL LIKE '%DELETE%'   OR @UpperSQL LIKE '%DROP%'    OR
       @UpperSQL LIKE '%CREATE%'   OR @UpperSQL LIKE '%ALTER%'   OR
       @UpperSQL LIKE '%TRUNCATE%' OR @UpperSQL LIKE '%MERGE%'   OR
       @UpperSQL LIKE '%EXEC%'     OR @UpperSQL LIKE '%EXECUTE%' OR
       @UpperSQL LIKE '%XP[_]%'    OR @UpperSQL LIKE '%SP[_]%'   OR
       @UpperSQL LIKE '%;%'        OR @UpperSQL LIKE '%--'       OR
       @UpperSQL LIKE '%OPENROWSET%' OR @UpperSQL LIKE '%OPENDATASOURCE%'
    BEGIN
        SET @ErrorMsg = '偵測到不允許的 SQL 語法,查詢已被拒絕';
        INSERT INTO _ai_query_log (使用者代號, 查詢描述, 執行SQL, 執行結果)
        VALUES (@LP_P1, @LP_P3, @LP_P2, @ErrorMsg);
        RAISERROR(@ErrorMsg, 16, 1);
        RETURN;
    END

    -- -----------------------------------------------
    -- 3.5 白名單檢查:FROM/JOIN 後的表名必須登記在 _ai_schema
    --      (防 AI 幻覺 / prompt injection 超出白名單)
    -- -----------------------------------------------
    DECLARE @scan NVARCHAR(MAX) = ' ' + @UpperSQL + ' ';
    SET @scan = REPLACE(REPLACE(REPLACE(@scan, CHAR(13), ' '), CHAR(10), ' '), CHAR(9), ' ');

    DECLARE @tables TABLE (tbl NVARCHAR(200));
    DECLARE @searchFrom INT, @pos INT, @tokStart INT, @tokEnd INT, @token NVARCHAR(200);

    -- 掃 FROM
    SET @searchFrom = 1;
    WHILE 1 = 1
    BEGIN
        SET @pos = CHARINDEX(' FROM ', @scan, @searchFrom);
        IF @pos = 0 BREAK;
        SET @tokStart = @pos + 6;
        WHILE SUBSTRING(@scan, @tokStart, 1) = ' ' SET @tokStart += 1;
        SET @tokEnd = @tokStart;
        WHILE @tokEnd <= LEN(@scan)
              AND CHARINDEX(SUBSTRING(@scan, @tokEnd, 1), ' ,;()') = 0
            SET @tokEnd += 1;
        SET @token = SUBSTRING(@scan, @tokStart, @tokEnd - @tokStart);
        SET @token = REPLACE(REPLACE(@token, '[', ''), ']', '');
        IF CHARINDEX('.', @token) > 0
            SET @token = SUBSTRING(@token, CHARINDEX('.', @token) + 1, 500);
        IF LEN(@token) > 0
            INSERT INTO @tables (tbl) VALUES (LOWER(@token));
        SET @searchFrom = @tokEnd + 1;
    END

    -- 掃 JOIN(INNER/LEFT/RIGHT/FULL/CROSS JOIN 都會命中 ' JOIN ')
    SET @searchFrom = 1;
    WHILE 1 = 1
    BEGIN
        SET @pos = CHARINDEX(' JOIN ', @scan, @searchFrom);
        IF @pos = 0 BREAK;
        SET @tokStart = @pos + 6;
        WHILE SUBSTRING(@scan, @tokStart, 1) = ' ' SET @tokStart += 1;
        SET @tokEnd = @tokStart;
        WHILE @tokEnd <= LEN(@scan)
              AND CHARINDEX(SUBSTRING(@scan, @tokEnd, 1), ' ,;()') = 0
            SET @tokEnd += 1;
        SET @token = SUBSTRING(@scan, @tokStart, @tokEnd - @tokStart);
        SET @token = REPLACE(REPLACE(@token, '[', ''), ']', '');
        IF CHARINDEX('.', @token) > 0
            SET @token = SUBSTRING(@token, CHARINDEX('.', @token) + 1, 500);
        IF LEN(@token) > 0
            INSERT INTO @tables (tbl) VALUES (LOWER(@token));
        SET @searchFrom = @tokEnd + 1;
    END

    -- 比對 _ai_schema.sql_name(不分大小寫)
    IF EXISTS (
        SELECT 1 FROM @tables t
        WHERE NOT EXISTS (
            SELECT 1 FROM _ai_schema s
            WHERE LOWER(LTRIM(RTRIM(s.sql_name))) = t.tbl
        )
    )
    BEGIN
        SET @ErrorMsg = '查詢包含不在白名單 (_ai_schema) 的資料表,已被拒絕';
        INSERT INTO _ai_query_log (使用者代號, 查詢描述, 執行SQL, 執行結果)
        VALUES (@LP_P1, @LP_P3, @LP_P2, @ErrorMsg);
        RAISERROR(@ErrorMsg, 16, 1);
        RETURN;
    END

    -- -----------------------------------------------
    -- 4. 加上 TOP 限制
    -- -----------------------------------------------
    IF PATINDEX('%SELECT TOP %', @UpperSQL) = 0 AND
   PATINDEX('%SELECT TOP(%', @UpperSQL) = 0 AND
   PATINDEX('%SELECT DISTINCT TOP %', @UpperSQL) = 0 AND
   @UpperSQL NOT LIKE '%FETCH NEXT%'
    BEGIN
        DECLARE @SelectPos INT = CHARINDEX('SELECT', @UpperSQL);
        SET @FinalSQL = LEFT(@LP_P2, @SelectPos + 5)
                      + ' TOP (' + CAST(@MaxRows AS NVARCHAR(10)) + ') '
                      + SUBSTRING(@LP_P2, @SelectPos + 7, LEN(@LP_P2));
    END
    ELSE
    BEGIN
        SET @FinalSQL = @LP_P2;
    END

    -- -----------------------------------------------
    -- 5. 記錄 Log
    -- -----------------------------------------------
    INSERT INTO _ai_query_log (使用者代號, 查詢描述, 執行SQL, 執行結果)
    VALUES (@LP_P1, @LP_P3, @FinalSQL, 'OK');

    -- -----------------------------------------------
    -- 6. 執行查詢
    -- -----------------------------------------------
    BEGIN TRY
        EXEC sp_executesql @FinalSQL;
    END TRY
    BEGIN CATCH
        DECLARE @CatchMsg NVARCHAR(500) = ERROR_MESSAGE();
        UPDATE _ai_query_log
        SET    執行結果 = 'ERROR: ' + @CatchMsg
        WHERE  pkid = SCOPE_IDENTITY();
        RAISERROR(@CatchMsg, 16, 1);
    END CATCH
END

USE [darbnogilog1]
GO
/****** Object:  StoredProcedure [dbo].[DARB_LOG_SYS_EXEC]    Script Date: 2026/6/5 下午 04:42:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create  PROCEDURE [dbo].[DARB_LOG_SYS_AI_EXEC]
   (@languagen INT,@eventtype nvarchar(10),@dataevent nvarchar(30),@datafunc nvarchar(30),@param1 nvarchar(500) OUTPUT,@param2 nvarchar(MAX),
    @param3 nvarchar(1000),@param4 nvarchar(200),@param5 nvarchar(200),@param6 nvarchar(200),@param7 nvarchar(200),
    @param8 nvarchar(200),@param9 nvarchar(200),@param10 nvarchar(200),@param11 nvarchar(200),@param12 nvarchar(200),
    @inputstaff nvarchar(20),@localtime datetime,@inputplace nvarchar(18),@srvdbid int,@log_sys_pkid int output,@result nchar(254) output)
   --2010/12/08 將 @param2 nvarchar(200) 改成 @param2 nvarchar(2000),配合 DARB_BROWSE
WITH EXECUTE AS 'foxrunprg' AS
BEGIN
   SET NOCOUNT ON;
   DECLARE @status1 nchar(6),@errornumber INT,@errormessage NCHAR(238),@sqlstring NVARCHAR(200),
   @databaseid char(1),@param_qty smallint,@paramoutput CHAR(1),@is_fail char(1),
   @csadbname nvarchar(20)=SUBSTRING(DB_NAME(),1,CHARINDEX('log',DB_NAME())-1)+'csa'+SUBSTRING(DB_NAME(),CHARINDEX('log',DB_NAME())+3,3) ;
   SELECT @errornumber='',@errormessage='',@is_fail='N'
   INSERT INTO dbo.log_sys_ai (languagen,eventtype,dataevent,datafunc,
      param1,param2,param3,param4,param5,param6,param7,param8,param9,param10,param11,param12,
      status1,inputstaff,localtime,inputplace,servertime,starttime,srvdbid)
      VALUES (@languagen,@eventtype,@dataevent,@datafunc,
      @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11,@param12,
      '',@inputstaff,@localtime,@inputplace,GETDATE(),GETDATE(),@srvdbid);
   SET @log_sys_pkid=scope_identity()--log_sys 的pkid 是 自動加 1
   SELECT @databaseid=databaseid,@param_qty=param_qty,@paramoutput=paramoutput FROM proc_param where datafunc=@datafunc
   IF @@ROWCOUNT=1
   BEGIN
      IF @databaseid='C' -- 代表是darbcsa 1~N
         SET @sqlstring=@csadbname+'.dbo.'+@datafunc;  --N'darbcsa'+SUBSTRING(DB_NAME(),8,6)+'.dbo.'+@datafunc;
      ELSE   -- 代表是darblog 1~N
         SET @sqlstring='dbo.'+@datafunc;
      BEGIN TRY
         IF @paramoutput='Y'  --只有第一個參數 OUTPUT
         BEGIN
            --IF @param_qty=0  應該要有參數 OUTPUT
            --   EXEC @sqlstring
            IF @param_qty=1
               EXEC @sqlstring @param1 OUTPUT
            IF @param_qty=2
               EXEC @sqlstring @param1 OUTPUT,@param2
            IF @param_qty=3
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3
            IF @param_qty=4
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4
            IF @param_qty=5
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5
            IF @param_qty=6
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6
            IF @param_qty=7
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7
            IF @param_qty=8
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7,@param8
            IF @param_qty=9
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9
            IF @param_qty=10
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10
            IF @param_qty=11
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11
            IF @param_qty=12
               EXEC @sqlstring @param1 OUTPUT,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11,@param12
         END
         ELSE
         BEGIN
            IF @param_qty=0
               EXEC @sqlstring
            IF @param_qty=1
               EXEC @sqlstring @param1
            IF @param_qty=2
               EXEC @sqlstring @param1,@param2
            IF @param_qty=3
               EXEC @sqlstring @param1,@param2,@param3
            IF @param_qty=4
               EXEC @sqlstring @param1,@param2,@param3,@param4
            IF @param_qty=5
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5
            IF @param_qty=6
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6
            IF @param_qty=7
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7
            IF @param_qty=8
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8
            IF @param_qty=9
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9
            IF @param_qty=10
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10
            IF @param_qty=11
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11
            IF @param_qty=12
               EXEC @sqlstring @param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11,@param12
         END
      END TRY
      BEGIN CATCH
         set @status1='NG'
         UPDATE dbo.log_sys_ai SET status1='NG',endtime=GETDATE() WHERE srvdbid=@srvdbid and pkid=@log_sys_pkid
         insert into log_error(logid,錯誤代碼,錯誤嚴重性,錯誤狀態碼,錯誤程序,錯誤行號,錯誤訊息,srvdbid) 
                  select -@log_sys_pkid,error_number() as 錯誤代碼,error_severity() as 錯誤嚴重性,
                  error_state() as 錯誤狀態碼,error_procedure() as 錯誤程序,
                  error_line() as 錯誤行號,error_message() as 錯誤訊息,@srvdbid ;
               select @errornumber=error_number(),@errormessage=error_message()
         SET @is_fail='Y'
      END CATCH
      IF @is_fail='N'
      BEGIN
         UPDATE dbo.log_sys_ai SET status1='OK',endtime=GETDATE() WHERE srvdbid=@srvdbid and pkid=@log_sys_pkid
         set @status1='OK'
      END
      set @result=@status1+N','+convert(nchar(6),@errornumber)+N','+@errormessage
   END
END
📖 對應 changelog ↗
2026-05-24 asset-accexp-workflow-fields
accexpassetvw_assetvw_accexp
ALTER TABLE accexp add  [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE accexp add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE accexp add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE accexp add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE accexp add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE accexp add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE asset add  [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE asset add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE asset add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE asset add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE asset add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE asset add  [已審核] [char](1) NOT NULL DEFAULT '';
go

ALTER VIEW [dbo].[vw_asset]
AS
SELECT          dbo.asset.財產編號, dbo.asset.資產別, dbo.asset.財產名稱, dbo.asset.財產分類碼, dbo.asset.廠商代號,
                            dbo.spdata.廠商簡稱, dbo.asset.廠牌, dbo.asset.規格, dbo.asset.單位, dbo.asset.部門代號, dbo.asset.數量,
                            dbo.asset.取得日期, dbo.asset.取得原價, dbo.asset.改良成本, dbo.asset.預留殘值, dbo.asset.現有狀況碼,
                            dbo.asset.年限, dbo.asset.備註, dbo.asset.資產減科目, dbo.asset.費用科目, dbo.asset.處分日期,
                            dbo.asset.再提年限, dbo.asset.處分金額, dbo.asset.再提殘值, dbo.asset.輸入日期, dbo.asset.輸入人員,
                            dbo.asset.輸入地點, dbo.asset.增刪修, dbo.asset.選擇, dbo.asset.管制碼, dbo.asset.srvdbid, dbo.asset.pkid,
                            dbo.asset.logid, dbo.asset.linkid, dbo.dept.部門簡稱, dbo.asset.保固年限, dbo.asset.原始金額, dbo.asset.附加費用,
                            dbo.vwcmb223_財產分類.field2 AS 財產分類, dbo.vwcmb224_現有狀況.field2 AS 現有狀況, dbo.asset.傳票號碼,
                            dbo.asset.財務單號, dbo.asset.置放地點, dbo.asset.建檔日期, dbo.asset.聯絡單id, dbo.asset.工作流程,
                            dbo.asset.審核人員, dbo.asset.審核日期, dbo.asset.已審核
FROM              dbo.asset LEFT OUTER JOIN
                            dbo.dept ON dbo.asset.部門代號 = dbo.dept.部門代號 LEFT OUTER JOIN
                            dbo.spdata ON dbo.asset.廠商代號 = dbo.spdata.廠商代號 LEFT OUTER JOIN
                            dbo.vwcmb223_財產分類 ON dbo.asset.財產分類碼 = dbo.vwcmb223_財產分類.field1 LEFT OUTER JOIN
                            dbo.vwcmb224_現有狀況 ON dbo.asset.現有狀況碼 = dbo.vwcmb224_現有狀況.field1
GO

ALTER VIEW [dbo].[vw_accexp]
AS
SELECT          dbo.accexp.費用編號, dbo.accexp.費用類別碼, dbo.vwcmb226_費用類別.field2 AS 費用類別, dbo.accexp.費用名稱,
                            dbo.accexp.製單日期, dbo.accexp.廠商代號, dbo.accexp.保單號碼, dbo.accexp.費用起始日, dbo.accexp.費用截止日,
                            dbo.accexp.費用金額, dbo.accexp.資產科目, dbo.accexp.費用科目1, dbo.accexp.費用科目2, dbo.accexp.費用科目3,
                            dbo.accexp.費用科目4, dbo.accexp.百分比1, dbo.accexp.百分比2, dbo.accexp.百分比3, dbo.accexp.百分比4,
                            dbo.accexp.備註, dbo.accexp.輸入日期, dbo.accexp.輸入人員, dbo.accexp.輸入地點, dbo.accexp.增刪修,
                            dbo.accexp.選擇, dbo.accexp.管制碼, dbo.accexp.srvdbid, dbo.accexp.pkid, dbo.accexp.logid, dbo.accexp.linkid,
                            dbo.spdata.廠商簡稱, dbo.accexp.財務單pkid, dbo.accexp.傳票號碼, dbo.accexp.財務單號, dbo.accexp.部門代號,
                            dbo.dept.部門簡稱, dbo.accexp.建檔日期, dbo.accexp.聯絡單id, dbo.accexp.工作流程, dbo.accexp.審核人員,
                            dbo.accexp.審核日期, dbo.accexp.已審核
FROM              dbo.accexp LEFT OUTER JOIN
                            dbo.dept ON dbo.accexp.部門代號 = dbo.dept.部門代號 LEFT OUTER JOIN
                            dbo.spdata ON dbo.accexp.廠商代號 = dbo.spdata.廠商代號 LEFT OUTER JOIN
                            dbo.vwcmb226_費用類別 ON dbo.accexp.費用類別碼 = dbo.vwcmb226_費用類別.field1
GO

EXEC sp_refreshview 'vw_accexp'
EXEC sp_refreshview 'vw_asset'
📖 對應 changelog ↗
2026-05-22 perdata-other-multi-row
-- 1. Contact / Education / WorkExperience:1XX / 3XX / 4XX → 0XXX (補 0 前綴)
UPDATE perdata_d
SET 序號 = '0' + RTRIM(序號)
WHERE LEFT(RTRIM(序號), 1) IN ('1', '3', '4')
  AND LEN(RTRIM(序號)) BETWEEN 2 AND 3;

-- 2. Other 那組:原本固定 序號='2',每個 perdata master 只有一組 6 筆 → 改成 '0201'(合併成第 1 列)
UPDATE perdata_d
SET 序號 = '0201'
WHERE RTRIM(序號) = '2';
GO
📖 對應 changelog ↗
2026-05-22 cheque-system-workflow-fields
bankcheckpaycheckrecbankfcstbankfxrmspbank
update _sheetno set 子表1view ='vw_bankfxrd' where 單據別 = 'BANKFXR'

ALTER TABLE bank add [票據號碼] [nvarchar](40) NOT NULL DEFAULT '';
ALTER TABLE bank add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE bank add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE bank add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE bank add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE bank add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE bank add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE checkpay add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE checkpay add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE checkpay add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE checkpay add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE checkpay add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE checkpay add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE checkrec add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE checkrec add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE checkrec add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE checkrec add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE checkrec add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE checkrec add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE bankfcst add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE bankfcst add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE bankfcst add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE bankfcst add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE bankfcst add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE bankfcst add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE bankfxrm add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE bankfxrm add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE bankfxrm add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE bankfxrm add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE bankfxrm add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE bankfxrm add  [已審核] [char](1) NOT NULL DEFAULT '';

ALTER TABLE spbank add [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE spbank add  [聯絡單id] [int] NOT NULL  DEFAULT 0;
ALTER TABLE spbank add  [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE spbank add  [審核人員] [nvarchar](20) NOT NULL DEFAULT '';
ALTER TABLE spbank add  [審核日期] [varchar](10) NOT NULL DEFAULT '';
ALTER TABLE spbank add  [已審核] [char](1) NOT NULL DEFAULT '';
📖 對應 changelog ↗
2026-05-21 procno-bom-m-cols
procnobom_mvw_wkcentvw_procnovw_bom_m
ALTER TABLE procno ADD [建檔日期] [char](10) NOT NULL DEFAULT '';
ALTER TABLE procno ADD [聯絡單id] [int]      NOT NULL DEFAULT 0;
ALTER TABLE procno ADD [工作流程] [varchar](6) NOT NULL DEFAULT '';
ALTER TABLE procno ADD [已審核]   [char](1)  NOT NULL DEFAULT '';

ALTER TABLE bom_m  ADD [建檔日期] [char](10) NOT NULL DEFAULT '';
GO

ALTER VIEW [dbo].[vw_wkcent]
AS
SELECT  dbo.wkcent.中心群組, dbo.wkcent.中心代號, dbo.wkcent.中心說明, dbo.wkcent.報價費率, dbo.wkcent.產能,
        dbo.wkcent.人工費率, dbo.wkcent.間接費比例, dbo.wkcent.每週天數, dbo.wkcent.部門代號, dbo.wkcent.輸入日期,
        dbo.wkcent.輸入人員, dbo.wkcent.輸入地點, dbo.wkcent.增刪修, dbo.wkcent.選擇, dbo.wkcent.管制碼,
        dbo.wkcent.srvdbid, dbo.wkcent.pkid, dbo.wkcent.logid, dbo.wkcent.linkid,
        ISNULL(dbo.vwseek_grpm1.說明, N'') AS 說明,
        ISNULL(dbo.dept.部門簡稱, N'') AS 部門簡稱,
        dbo.wkcent.聯絡單id, dbo.wkcent.工作流程,
        dbo.wkcent.審核人員, dbo.wkcent.審核日期, dbo.wkcent.已審核, dbo.wkcent.建檔日期
FROM    dbo.wkcent
        LEFT OUTER JOIN dbo.vwseek_grpm1 ON dbo.wkcent.中心群組 = dbo.vwseek_grpm1.群組代號
        LEFT OUTER JOIN dbo.dept         ON dbo.wkcent.部門代號 = dbo.dept.部門代號;
GO

ALTER VIEW [dbo].[vw_procno]
AS
SELECT  dbo.procno.工程代號, dbo.procno.工程簡稱, dbo.procno.報價簡稱, dbo.procno.工程說明, dbo.procno.中心群組,
        dbo.procno.重要度, dbo.procno.重要項目, dbo.procno.圖檔名稱, dbo.procno.製造規格, dbo.procno.檢驗規格,
        dbo.procno.審核人員, dbo.procno.審核日期, dbo.procno.損耗率, dbo.procno.輸入日期, dbo.procno.輸入人員,
        dbo.procno.輸入地點, dbo.procno.增刪修, dbo.procno.選擇, dbo.procno.管制碼,
        dbo.procno.srvdbid, dbo.procno.pkid, dbo.procno.logid, dbo.procno.linkid,
        dbo.vwseek_grpm1.說明,
        dbo.procno.建檔日期, dbo.procno.聯絡單id, dbo.procno.工作流程, dbo.procno.已審核
FROM    dbo.procno
        LEFT OUTER JOIN dbo.vwseek_grpm1 ON dbo.procno.中心群組 = dbo.vwseek_grpm1.群組代號;
GO

ALTER VIEW [dbo].[vw_bom_m]
AS
SELECT  dbo.bom_m.組件編號, dbo.vwseek_invent.品名, dbo.vwseek_invent.品別, dbo.vwseek_invent.停用說明,
        dbo.vwseek_invent.設變編號, dbo.vwseek_invent.設變資料, dbo.bom_m.機種別, dbo.bom_m.銷售地區,
        dbo.bom_m.客戶, dbo.bom_m.生產轉入倉, dbo.bom_m.流程樣板號, dbo.bom_m.聯絡單id, dbo.bom_m.工作流程,
        dbo.bom_m.審核人員, dbo.bom_m.審核日期, dbo.bom_m.已審核, dbo.bom_m.輸入日期, dbo.bom_m.輸入人員,
        dbo.bom_m.輸入地點, dbo.bom_m.增刪修, dbo.bom_m.選擇, dbo.bom_m.管制碼,
        dbo.bom_m.srvdbid, dbo.bom_m.pkid, dbo.bom_m.logid, dbo.bom_m.linkid,
        dbo.vwseek_invent.零件編號, dbo.bom_m.建檔日期
FROM    dbo.bom_m
        LEFT OUTER JOIN dbo.vwseek_invent ON dbo.bom_m.組件編號 = dbo.vwseek_invent.品號;
GO

INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'1     ', N'原任職公司     ', N'C', 30, 0, N'服務機關名稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 1, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'2     ', N'原部門       ', N'C', 30, 0, N'部門/職稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 2, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'3     ', N'原任職日期     ', N'C', 10, 0, N'到職日', N'9999/99/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2019-04-18T17:18:41.633' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 3, 215195, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'4     ', N'原離職日期     ', N'C', 10, 0, N'離職日', N'9999/99/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2019-04-18T17:18:41.633' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 4, 215195, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'5     ', N'原待遇       ', N'N', 18, 6, N'薪資(月)', N'999,999,999', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 5, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'6     ', N'原工作內容     ', N'C', 80, 0, N'主要工作', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 6, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'7     ', N'原離職原因     ', N'C', 80, 0, N'離職原因', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_4_B_任職經歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 7, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'8     ', N'學校名稱      ', N'C', 30, 0, N'學校名稱', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 8, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'9     ', N'院系科別      ', N'C', 30, 0, N'院系科別', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 9, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'10    ', N'修業年月起     ', N'C', 7, 0, N'修業起始年月', N'9999/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 10, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'11    ', N'修業年月迄     ', N'C', 7, 0, N'修業結束年月', N'9999/99', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 11, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'12    ', N'是否畢業      ', N'C', 1, 0, N'畢/肄', N'Y', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 12, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'13    ', N'學位        ', N'C', 30, 0, N'學位', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_3_B_學歷', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 13, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'14    ', N'眷屬稱謂      ', N'C', 10, 0, N'稱謂', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 14, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'15    ', N'眷屬姓名      ', N'C', 10, 0, N'姓名', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 15, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'16    ', N'眷屬出生      ', N'C', 10, 0, N'出生日期', N'9999/99/99', N'CHKDATE', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-09T00:04:00.727' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 16, 64740, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'17    ', N'眷屬職業      ', N'C', 20, 0, N'職業', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 17, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'18    ', N'緊急聯絡人     ', N'C', 20, 0, N'姓名', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2022-10-13T17:20:14.240' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 18, 526961, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'19    ', N'緊急關係      ', N'C', 10, 0, N'關係', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 19, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'20    ', N'緊急電話      ', N'C', 20, 0, N'電話', N'XXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 20, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'21    ', N'緊急地址      ', N'C', 80, 0, N'地址', N'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_1_B_緊急聯絡人', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 21, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'48    ', N'身份證號      ', N'C', 14, 0, N'身份證號', N'XXXXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 55, 64734, 3);
GO
INSERT [dbo].[datatpld] ([序號], [欄位], [資料型態], [長度], [小數位數], [標題], [輸入遮罩], [valid方法], [公式], [參照資料], [輸入方式], [輸入內容], [允許輸入], [搜尋方式], [權限], [備註], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'49    ', N'眷屬關係      ', N'C', 10, 0, N'眷屬關係', N'XXXXXXXXXX', N'', N'', N'', N'SQLTEXT   ', N'', N' ', N'', N'', N'P1_2_B_眷屬資料', CAST(N'2014-06-08T23:59:14.177' AS DateTime), N'Gary', N'CMSA-SERVER # cmsa', N' ', N' ', 0, 1, 56, 64734, 3);
GO
INSERT [dbo].[datatplm] ([資料模板號], [說明], [輸入日期], [輸入人員], [輸入地點], [增刪修], [選擇], [管制碼], [srvdbid], [pkid], [logid], [linkid]) VALUES (N'P1    ', N'人事明細資料', CAST(N'2012-10-04T15:32:02.280' AS DateTime), N'令狐沖', N'WXWG101234 # wg101', N' ', N' ', 0, 1, 3, 2109, 0);
GO
📖 對應 changelog ↗
2026-05-09 mailqueue-channel
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = N'qq',
    @recipients   = ...,
    @subject      = @subject,
    @body         = @body,
    @body_format  = N'HTML';

INSERT dbo.twork_skd_mailqueue (收件人, 主旨, 內文, 是否HTML, 來源預存程序, 執行guid)
VALUES (@recipients, @subject, @body, 'Y', OBJECT_NAME(@@PROCID), @execguid);

SELECT 狀態, COUNT(*) FROM dbo.twork_skd_mailqueue GROUP BY 狀態;

-- 死信檢視
SELECT pkid, 主旨, 重試次數, 最後錯誤, 來源預存程序
  FROM dbo.twork_skd_mailqueue
 WHERE 狀態 = 'D'
 ORDER BY 建立時間 DESC;
📖 對應 changelog ↗
2026-05-04 skd-sp-split
TWORK_SKD_GET_PENDING_NOTIFYTWORK_SKD_GET_PENDING_AUTOEXEC
-- 1. 建立待通知 SP
CREATE PROCEDURE [dbo].[TWORK_SKD_GET_PENDING_NOTIFY]
    (@datetime datetime)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT *
    FROM dbo.twork_vw_calendarevent
    WHERE 已審核 = 'Y'
      AND 是否停用 <> 'Y'
      AND 通知 = 'Y'
      AND 通知帳號 <> ''
      AND 已通知 <> 'Y'
      AND @datetime >= 通知時間;
END
GO

-- 2. 建立待自動執行 SP
CREATE PROCEDURE [dbo].[TWORK_SKD_GET_PENDING_AUTOEXEC]
    (@datetime datetime)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT TOP 20 *
    FROM twork_vw_calendarevent
    WHERE 已完成 NOT IN ('Y', 'F')
      AND (已完成 <> 'R' OR 執行開始時間 < DATEADD(MINUTE, -10, @datetime))
      AND 已審核 = 'Y'
      AND 是否停用 <> 'Y'
      AND 是否自動執行 = 'Y'
    ORDER BY 預定時間 ASC;
END
GO
📖 對應 changelog ↗
2026-05-03 eventitem-status-r-completion-time
ALTER PROCEDURE [dbo].[TWORK_SKD_UPDATE_EVENT_STATUS]
       @LP_P1 varchar(1),    -- 1 = 已通知, 2 = 已完成
       @LP_P2 varchar(50),   -- pkid
       @LP_P3 varchar(1),    -- 'R' / 'Y' / 'F' / ''
       @LP_P4 varchar(20)    -- yyyy/MM/dd HH:mm:ss 或 ''
   AS
   BEGIN
       SET NOCOUNT ON;
       DECLARE @StartTime datetime = NULL;
       IF @LP_P4 <> ''
           SET @StartTime = CONVERT(datetime, @LP_P4, 111);

       IF @LP_P1 = '1'
           UPDATE [twork_skd_eventitem]
              SET [已通知] = @LP_P3,
                  [執行開始時間] = CASE WHEN @LP_P4 = '' THEN [執行開始時間] ELSE @StartTime END
            WHERE [pkid] = @LP_P2;
       ELSE IF @LP_P1 = '2'
           UPDATE [twork_skd_eventitem]
              SET [已完成] = @LP_P3,
                  [執行開始時間] = CASE WHEN @LP_P4 = '' THEN [執行開始時間] ELSE @StartTime END,
                  [完成時間] = CASE WHEN @LP_P3 = 'Y' THEN GETDATE() ELSE [完成時間] END,
                  [是否停用] = CASE WHEN @LP_P3 = 'Y' THEN 'Y' ELSE '' END
            WHERE [pkid] = @LP_P2;
   END

UPDATE twork_skd_eventitem SET 已完成 = 'R' WHERE 已完成 = 'X';
📖 對應 changelog ↗
2026-05-03 autopilot-task-unify
UPDATE twork_skd_vw_eventtemplated SET 執行方法 = 'CloseBook'     WHERE 執行方法 = '關帳';
UPDATE twork_skd_vw_eventitem      SET 執行方法 = 'CloseBook'     WHERE 執行方法 = '關帳';
UPDATE twork_skd_vw_eventtemplated SET 執行方法 = 'BalanceReport' WHERE 執行方法 = 'CreateBalanceSheet';
UPDATE twork_skd_vw_eventitem      SET 執行方法 = 'BalanceReport' WHERE 執行方法 = 'CreateBalanceSheet';
UPDATE twork_skd_vw_eventtemplated SET 執行方法 = 'PaymntpqQuery' WHERE 執行方法 = 'CreateEmail';
UPDATE twork_skd_vw_eventitem      SET 執行方法 = 'PaymntpqQuery' WHERE 執行方法 = 'CreateEmail';
📖 對應 changelog ↗