我需要从数据库中提取数据。我在这个特定的数据库上只有datareader。另一个部门负责填写此数据库。但是,他们在更新此数据库时并不总是进行通信。事实证明,就时间表达成一致意见毫无意义。当我从该数据库中读取数据时,这会导致频繁出现问题(死锁,数据不完整)。是否有某种方式(最好是通过TSQL)来确定它们是否正在改变该数据库?通过这种方式,我可以在我的SSIS过程中构建一个检查程序,如果它们在该数据库中是mut(il),则重新安排我的包。
(是的,我确实认识到这不应该通过技术程序解决,而是通过合作解决,但我强烈要求建立一个检测机制')
答案 0 :(得分:0)
关于死锁:如果您正在从OLTP数据存储中读取,通常会使用&#34; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; < / EM>&#34 ;.这通常在选择级别实现为&#34; ... WITH(NOLOCK)... &#34;,但如果您使用的是程序,那么在存储过程级别执行此操作是首选
关于不完整数据:在select语句中,您应该实现排除部分数据的连接。例如;如果用户名是&#34; John Smith&#34;被插入高度规范化的模式和(新)名称&#34; John&#34;和#34;史密斯&#34;已被插入表格&#34; [user]。[name]([id] [int],[name] nvarchar); &#34;,但相应的记录没有&#39 ; t被插入表格&#34; [user]。[full_name]([first] [int],[last] [int]); &#34;,你会内连接这两个表,所以你不会得到&#34; John&#34;和#34;史密斯&#34;因为&#34; [full_name] &#34;中没有相应的记录。表