我有一些具有相同基本结构的非常大的表。每个都有一个RowNumber (bigint)和DataDate (date)列。每天晚上使用SQLBulkImport加载数据,并且从未加载过任何“新”数据-它是历史记录(SQL Standard,不是Enterprise,因此没有分区)。 因为每个数据位都需要绑定到其他系统,并且每个RowNumber/DataDate组合都是唯一的,所以这就是我的主键。 我注意到,由于我在SSMS Table Designer中定义PK的方式,RowNumber第一和DataDate第二列出了。 我还注意到,我的碎片始终非常高,高达〜99%。 现在,由于每个DataDate索引仅出现一次,所以我希望索引器每天都添加到页面中,但是我想知道它是否实际上是RowNumber首先基于索引编制的,因此是否需要转移其他所有内容? Rownumber不是一个标识列,它是一个由外部系统生成的int(很糟糕)。它在每个开始时重置DataDate。 示例数据 RowNumber | DataDate | a | b | c..... 1 |2013-08-01| x | y | z 2 |2013-08-01| x | y | z ... 1 |2013-08-02| x | y | z 2 |2013-08-02| x | y | z …
我想修改SQL Azure表上的现有主键。 它当前有一个列,我想添加另一列。 现在,在SQL Server 2008上,这简直是小菜一碟,只是在SSMS里做了。做完了 如果我从SQL Server编写PK,这就是它的样子: ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) 但是,在SQL Azure上,当我尝试执行上述操作时,它当然会失败: Table 'Friend' already has a primary key defined on it. 很好,因此我尝试删除密钥: Tables without a clustered index are not supported in this version of SQL Server. …
从数学的角度来看,假设一个表最多具有一个主键,那么用某种任意名称而不是简单的表属性来引用主键似乎是一个短时的设计决策。 因此,要将主键从非集群键更改为集群键,反之亦然,您必须首先搜索其名称,然后删除它,最后读取它。 使用我看不到的任意名称是否有一些优势,或者DBMS不对主键使用任意名称? 编辑2011-02-22 (对于那些不想在那里排序的人,则为02/22/2011): 让我展示一下该函数,您可以使用该函数从其表名派生主键的名称(使用早期的sql-sever aka sybase系统表): create function dbo.get_pk (@tablename sysname) returns sysname as begin return (select k.name from sysobjects o join sysobjects k on k.parent_obj = o.id where o.name = @tablename and o.type = 'U' and k.type = 'k') end go 如gbn所述,当您不提供显式名称时,没有人真的喜欢生成的名称: create table example_table ( id …