iT邦幫忙

0

MS SQL 的Trigger 指令錯了,該如何修正?

請問在MS SQL 使用 https://ithelp.ithome.com.tw/upload/images/20181205/20108157iHPuwq7HVV.jpg 紀錄資料表device_list的新增、修改、刪除的資料複寫到另device_list_log裏,並加上是什麼狀態,以下指令第30行錯了?該如何修正?

2 個回答

0
純真的人
iT邦高手 3 級 ‧ 2018-12-05 10:06:46
最佳解答

如果你不確定 device_list_log 資料表的欄位
請下完整的INSERT INTO寫法~
因為系統告訴你寫入的欄位數量不對稱~

例如你的是以下方式的錯誤
insert into device_list_log(A,B,C)
select A,B,C,D from Inserted

看更多先前的回應...收起先前的回應...
hheyjen iT邦新手 5 級 ‧ 2018-12-05 10:53:05 檢舉

請問30行(Insert Into devicelistlog Select , N'After Inserted', getdate() From Inserted)的N'After Inserted'是什麼意思? 還有Inserted、deleted這2個table 是哪個?

N'After Inserted' 是devicelistlog 裡面有個欄位紀錄著After Inserted的字串~
關於Inserted、deleted要在你的資料表清單會有~
你查看看~你的資料庫裡面有哪些資料表~
裡面肯定會有Inserted、deleted資料表~

hheyjen iT邦新手 5 級 ‧ 2018-12-05 15:22:49 檢舉

我找不到有 Inserted、deleted這2個資料表

我去查了一下~那兩個資料表好像是 DML 觸發程序陳述式使用兩個特殊的資料表:已刪除的資料表和已插入的資料表。
[SQL Server] 會自動建立及管理這些資料表。
https://docs.microsoft.com/zh-tw/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables?view=sql-server-2017

那你查的到device_list_log的欄位嗎?
因為是寫入跟查詢的欄位要一致

hheyjen iT邦新手 5 級 ‧ 2018-12-06 09:08:04 檢舉

有查到了,謝謝您的提示

0
rogeryao
iT邦研究生 5 級 ‧ 2018-12-05 10:10:50

1.檢查 device_list_log 是否有比 Inserted Table 多 2 個欄位
2.用完整的欄位對應試試

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

我要發表回答

立即登入回答