Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在许多表中拥有唯一的列_Sql Server_Sql Server 2008_Unique Key - Fatal编程技术网

Sql server 如何在许多表中拥有唯一的列

Sql server 如何在许多表中拥有唯一的列,sql-server,sql-server-2008,unique-key,Sql Server,Sql Server 2008,Unique Key,我有十个或更多(我不知道)表,它们的列名为foo,数据类型相同。 如何告诉sql所有表中的值都应该是唯一的。 我的意思是,如果(我在表1中有值“1”),我应该不能在表2中有值“1”有一个公共ID的表,这十个表引用了该表。这将很好地工作,因为它将确保唯一的ID,但并不意味着如果有人真的想复制表中的ID,就不能复制 我的意思是,公共ID的表可以确保插入时没有重复的ID(也可以将ID插入此公共表中),但确保不会发生重复的方法是将业务规则构建到系统中或放置检查约束以交叉引用其他表(这将确保唯一性,但会降

我有十个或更多(我不知道)表,它们的列名为foo,数据类型相同。
如何告诉sql所有表中的值都应该是唯一的。

我的意思是,如果(我在表1中有值“1”),我应该不能在表2中有值“1”有一个公共ID的表,这十个表引用了该表。这将很好地工作,因为它将确保唯一的ID,但并不意味着如果有人真的想复制表中的ID,就不能复制


我的意思是,公共ID的表可以确保插入时没有重复的ID(也可以将ID插入此公共表中),但确保不会发生重复的方法是将业务规则构建到系统中或放置检查约束以交叉引用其他表(这将确保唯一性,但会降低性能)。

您可以将该字段定义为GUID(或SQL server中的唯一标识符)。那么无论发生什么,它都将是唯一的。

这个问题的措辞含糊不清;如果需要生成多个表中唯一的列,请使用行GUID或公共ID生成器表;如果需要强制唯一性(并且字段值已经存在),请使用触发器


通常,如果生成值,则不需要强制执行任何操作。如果正确执行,生成逻辑将解决此问题。如果插入(例如)用户输入,则可以并且应该在插入过程中强制执行唯一性。作为验证规则或其他什么。

如何在每个表上设置检查约束,例如ID%10=N(其中N是表号,从0到9)。并且每次都使用标识(N,10)。

我认为您的设计可能有缺陷。为什么这些表是独立的?最好将它们放在一个表中,一个id字段和另一个字段,以标识这些表的组成部分(例如cusotmer id)。然后,如果出于性能原因希望按客户拆分表,您可以阅读有关分区表的内容。

值的顺序很重要。如果我尝试插入的值不唯一,我希望出现一些错误。(我希望被告知我的程序中是否存在并发问题)。但我不喜欢触发器(因为它们对我的工作(+10个表)来说似乎很慢)任何解决方案都会很慢,因为你的设计很差。@HLGEM:我这样做是为了尽可能快地进行查询。但我认为你是对的。(任何解决方案都会很慢。)@Behrooz DBMS表的工作就是:包含数十亿行。这没什么错。你为什么向自己保证这一点?@Behrooz还有另一种方法:正确的方法。寻找“第三范式”问:如果表1有1000行,我在表2中插入了一行。答:我已经丢失了行的顺序。这很公平。我没有把它作为一个要求。如果你沿着IDs表的路线走,使用OUTPUT子句来确保你没有并发问题。