我有一个表格,我推送相关数据。它有6列可以为空。基于某些逻辑,2的组合始终是非空的(最后4个中的第1个和第2个中的一个以及后4个中的一个)。这样我避免使用8个不同的表来保存数据。
是否有任何T-SQL (开始相当新的SQL Server细节)快捷方式,在这6列上创建一个唯一键,表示确保索引中提到的列之间的任何非空组合(1st-6th)是唯一的,没有真正特定的开始?
我可以为每个组合创建唯一索引,但我想知道是否有任何保持懒惰的快捷方式并使用(写) 1索引与其中的8个。它显然不是一个很大的努力,但更短的东西更好......在代码中,大多数时候都是这样!
答案 0 :(得分:2)
(computed1, computed2)
和列start
。begin
。我希望我做对了。也许你需要稍微改变一下。
答案 1 :(得分:1)
在以下内容上创建计算列:
COALESCE(
cast(1 as binary(1)) + cast(col1 as binary(4)) /* Choose appropriate length for the type of col1 */
,cast(2 as binary(1)) + cast(col2 as binary(4)) /* Choose appropriate length for the type of col2 */
)
+ COALESCE(
cast(3 as binary(1)) + cast(col3 as binary(4)) /* Choose appropriate length for the type of col3 */
,cast(4 as binary(1)) + cast(col4 as binary(4)) /* Choose appropriate length for the type of col4 */
,cast(5 as binary(1)) + cast(col5 as binary(4)) /* Choose appropriate length for the type of col5 */
,cast(6 as binary(1)) + cast(col6 as binary(4)) /* Choose appropriate length for the type of col6 */
)
您可能不需要每对中的第一个值 - 取决于(17,null,1,null,null,null)是否应与(null,17,null,null,1,null)相同或不相同。
但无论如何,使用此计算列,您可以在其上放置唯一索引。 :)
您可以在两列中执行此操作,但您可以在单个列中执行此操作。
答案 2 :(得分:0)
我认为没有,SQL-Server中的索引是唯一的(在索引中的所有行上),或者它不是唯一的。
答案 3 :(得分:0)
只需在6列
上创建一个唯一索引