0
A
回答
1
每喬鏈接Why can't I put a constraint on nvarchar(max)?您不能創建一個唯一約束。
但是,你可以僅在第800(nvarchar的)字符和索引唯一添加COMPUTED
列。
你可以加強與服用checksum
或hashbytes
(或兩者)爲nvarchar(max)列,並創建一個針對(前800 +哈希)獨特
不要採取校驗或HASHBYTES alone
因爲碰撞是司空見慣的,你甚至會拒絕非重複。
編輯:對於一個更好的方法,使用這種方法
- 採取的第一個8000個字符的HASHBYTE作爲觸發計算列和索引它
- ,你可以使用的HASHBYTE插入行作爲一個快速過濾文本來縮小實際需要記錄的檢查重複
SELECT .. FROM TBL T JOIN INSERTED I .. WHERE HASHBYTE(I.vcmax) = T.ComputedHB AND I.vcmax = T.vcmax AND I.ID != T.ID -- exclude self
注 - ComputedHB
是計算列
如果您發現任何記錄,那麼有一個「唯一約束」違反
2
使用HASHBYTES創建列的哈希值,並把唯一約束上。使用SHA或MD5,您不會意外碰撞(但如果您真的偏執狂使用兩種不同算法的哈希)!
相關問題
- 1. 唯一對約束的觸發器
- 2. 使用觸發器約束
- 3. XML模式唯一約束
- 4. 使用觸發器約束列值
- 5. SQL使用觸發器進行約束
- 6. MySQL觸發器可以模擬CHECK約束嗎?
- 7. SQLite觸發器奇怪的是失敗的唯一約束
- 8. 插入觸發器以驗證唯一約束條件
- 9. 唯一約束
- 10. mysql約束或觸發器
- 11. 觸發器作爲約束
- 12. 唯一約束(W/O觸發)上的「一到多」關係
- 13. 唯一約束Nhibernate
- 14. OpenERP唯一約束
- 15. oracle唯一約束
- 16. 唯一約束JayData
- 17. 唯一約束(SchemaName.DATA1_PK)
- 18. 唯一約束值
- 19. MySQL觸發器不被約束調用
- 20. 模擬ORDER BY SQLite中UPDATE處理唯一性約束
- 21. 唯一約束在NON-NULL列上的唯一約束
- 22. 使用MYSQL條件的唯一約束
- 23. DataTable唯一約束 - 引發事件
- 24. XSD唯一約束(XML模式)
- 25. 嵌入式模式的唯一約束
- 26. CakePHP加入模型的唯一約束
- 27. 唯一約束在couchrest模型
- 28. Django模型唯一約束例外
- 29. 引發QLSTATE的唯一約束[23000]:完整性約束違規:1062因爲唯一約束而重複
- 30. 唯一約束vs唯一索引
爲什麼你不能創建約束/索引?任何具體原因?與觸發器相比,這將是一種更好的方式。 – Chandu 2011-01-24 22:34:44
@Cybernate:你不能在nvarchar(max)上創建唯一的索引。請參閱:[爲什麼我不能對nvarchar(max)進行約束?](http://stackoverflow.com/questions/1184490/why-cant-i-put-a-constraint-on-nvarcharmax) – 2011-01-24 22:36:19
明白了....我沒有意識到這一點。 Thx – Chandu 2011-01-24 22:39:44