1
A
回答
7
您可以創建一個INSERT TRIGGER來檢查條件是否滿足。這樣所有更新都會直接進行。
CREATE TRIGGER employee_insupd
ON employee
FOR INSERT
AS
/* Get the range of level for this job type from the jobs table. */
DECLARE @min_lvl tinyint,
@max_lvl tinyint,
@emp_lvl tinyint,
@job_id smallint
SELECT @min_lvl = min_lvl,
@max_lvl = max_lvl,
@emp_lvl = i.job_lvl,
@job_id = i.job_id
FROM employee e INNER JOIN inserted i ON e.emp_id = i.emp_id
JOIN jobs j ON j.job_id = i.job_id
IF (@job_id = 1) and (@emp_lvl <> 10)
BEGIN
RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)
BEGIN
RAISERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @job_id, @min_lvl, @max_lvl)
ROLLBACK TRANSACTION
END
1
我認爲你最好的選擇是刪除顯式約束併爲插入添加一個cursor,這樣你就可以在那裏執行你的檢查並在違反約束時產生一個錯誤。
1
什麼樣的約束?我在猜測外鍵約束,因爲你暗示刪除一行可能會違反約束條件。如果是這樣的話,似乎你本身並不需要約束,因爲你不關心參照完整性。
不知道更多關於您的具體情況,我會迴應其他海報的意圖,這似乎是「強制執行數據訪問層中的插入要求」。但是,我會狡猾地實施它們。一個觸發器看起來像是矯枉過正,任何有能力的DBA都應該用木製的尺子嚴格地抨擊你的指關節,試圖用光標執行簡單的插入操作。存儲過程應該足夠了。
相關問題
- 1. Oracle強制執行軟刪除約束
- 2. 只有填充字段時,才使XForms強制執行約束並鍵入模型項屬性
- 3. 表單輸入約束沒有被強制執行?
- 4. 對同一表格中的其他行執行強制約束
- 5. 如何在創建的表中強制執行約束?
- 6. 只有當表爲空時才執行mysql插入
- 7. 只有存在文字時才強制換行? JavaScript的
- 8. 檢查對於約束插入
- 9. 有沒有在AWS DynamoDB表上強制執行模式約束的方法?
- 10. 爲了強制執行檢查約束,在表中複製列是否是個好主意?
- 11. 強制FK約束時JPA插入繼承的對象
- 12. 強制執行數據庫約束:代碼vs sql
- 13. web2py獨特的約束不被強制執行
- 14. MongoDB的強制執行跨文檔複雜約束的集合
- 15. Quartz Scheduler只有在沒有運行時才執行作業
- 16. 在c中插入行時違反UNIQUE KEY約束條件#
- 17. 在表中插入行時的外鍵約束
- 18. 只有當本地域存在時才執行條件查找?
- 19. 只有在滿足一定條件時才執行插入語句
- 20. 插入幾個行以滿足約束
- 21. 如何在`flask-admin`中執行約束?
- 22. 如何強制重複鍵插入mssql
- 23. 將sql server約束檢查限制爲只有新數據
- 24. 如何檢查是否有行和執行插入
- 25. 未執行Oracle FK約束
- 26. QCheckBox只執行時檢查兩次
- 27. 強制GridView只有一行?
- 28. 強制執行
- 29. 鍵入數據集 - 強制約束
- 30. 檢查約束